iOS开发中的一些小技巧

制作framework

查看支持的架构 lipo -info 库路径
制作的时候选择运行是模拟器则支持 i386 x86_64
选择 Generic iOS Device 则支持 armv7 arm64
只支持 i386 x86_64 打不了包,archive 的时候有问题,说符号找不到。


image.png

如果只支持 armv7 arm64 打了包以后,说要签名的内容为空。
所以要将这两个库合并
lipo -create A B -ouput C

如果 framework 要支持 bitcode,那么要配置这四个地方
//www.greatytc.com/p/474d7f33e3c5
如果配置其中的 DEPLOYMENT_POSTPROCESSING 为 YES,
那么打出来的framework 在二进制转源代码上有问题啊。
看了另外一篇文章,发现不需要配置 DEPLOYMENT_POSTPROCESSING
//www.greatytc.com/p/522da4bd9e6e
把这个删了 才搞定

Cocoapods问题

'> 1.0',版本号大于1.0。
'>= 1.0',版本号大于等于1.0。
'< 1.0',版本号小于1.0。
'<= 1.0',版本号小于等于1.0。
'~> 1.0.1',版本号范围:1.0.1 <= version < 1.1
'~> 1.0',版本号范围:1.0 <= version < 2.0
'~> 0',版本号范围:0 <= version,无意义
  • Podfile.lock
    该文件用来记录和追踪生成的Pod版本。

  • pod install
    每次执行pod install,都会重新下载并安装pods。
    pods的版本号从Podfile.lock文件中获取:
    有记录的pods,直接下载安装该记录版本号的pods,不检查对应pods是否有更新;(已经安装的pods不会更新其版本)
    无记录的pods,查找下载并安装满足Podfile中指定版本号条件的pods。

  • pod update
    完整命令为:pod update [PODNAME],执行命令后,CocoaPods会无视Podfile.lock锁定的版本号,查找并更新到,满足Podfile中指定版本号条件的最新版本pods;若没有指定PODNAME,默认更新Podfile中全部pods。

  • 建议用法
    工程首次执行pod install或pod update,执行效果一致。
    需要安装新添加pod,建议执行pod install或pod update [NEW_POD],已安装的其他pods版本不变,否则可能由于版本更新的不确定性引起适配问题。
    明确更新某pod版本时,执行pod update [PODNAME],明确更新全部pods版本时,执行pod update。

几个地方

定义UIImageView的时候加上clipsToBounds = true,不然图片会超出大小。
定义UITableViewCell, 直接敲init,会提示
定义UITableViewCell,的时候写上register,在cellFor的时候直接用。

tableView.register(MainTableViewCell.self, forCellReuseIdentifier: "MainTableViewCell")
let cell = tableView.dequeueReusableCell(withIdentifier: "MainTableViewCell") as! MainTableViewCell

获取唯一标志,卸载以后也不变

要使用keychain,其他方法都不靠谱,苹果禁掉了。
https://github.com/v2panda/PDKeyChain

    NSString *uuid = [PDKeyChain keyChainLoad];
    if (uuid) {
        return uuid;
    } else {
        uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
        [PDKeyChain keyChainSave:uuid];
        return uuid;
    }
    return uuid;

解决pod repo update太慢问题

只需要更新单个库即可

➜  sky-forest-ios git:(zyzz_1.4.2) pod repo update /Users/guohongwei719/.cocoapods/repos/master/Specs/0/f/b/MJRefresh

如果写了一些东西,但是发现不用了,可以用revert,不至于删掉,比如对此时此刻改造

git revert 6e18cd81198ababde0b3587afd78a00943ac87d6

清理缓存

open /Users/guohongwei719/Library/Developer/Xcode/DerivedData

applicationWillTerminate 执行问题

直接杀死app是可以执行的,但是如果按home进入后台,然后双击home杀掉,则不会执行。解决办法如下:

    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(){
        //程序在10分钟内未被系统关闭或者强制关闭,则程序会调用此代码块,可以在这里做一些保存或者清理工作
    }];

引用文件的问题

如果是Swift项目,就是创建项目的时候选择的是Swift语言。那么
在Swift文件中使用OC中的方法,要在OC_Swift_bridge.h中import



在OC文件中使用OC中的方法,要在.pch文件中import



在OC文件中使用Swift中的方法,在要使用的变量前面要加@objc, 还要要在OC文件中
#import "DaMai-Swift.h"

如何忽略xuserdata里面的文件

  1. 在.gitignore里面加入这些问题件;
  2. 如果还在,则注意清理缓存。
    http://blog.csdn.net/lixuezhi86/article/details/52162447

斗鱼里面Podfile

# Uncomment this line to define a global platform for your project
platform :ios, '9.0'
# Comment this line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!

target 'DYZB' do

pod 'Alamofire', '~> 4.0.1'
pod 'Kingfisher', '~> 3.1.1'

end

开始担心没有适配iOS11就提交到appstore,会界面显示很乱。

操心太多,不会的,因为使用的是Xcode8打包的,所以不会出问题,后来在iOS11上下在appstore的包来看,其实界面也是好的。如果Xcode9打包出来的不适配就有问题了,但是模拟器上是可以发现问题的。这个早就应该知道了。

扩大UIButton的响应区域


办法一:设置UIButton的contentMode为center,然后让UI切一个小图,size设置大一点;
办法二:写一个UIButton的Category,使用运行时的一些办法是判断点击范围,参考iOS 扩大UIButton的响应区域

使用git reset --hard xxxxxx回退到以前的提交,但是忘了最后一个提交,回不去咋办,使用git reflog查看最后一个提交commit id

如图



git reflog记住了你所敲过的所有命令,而且每个命令所在的commit id都有备注,所以不用担心回不去了。
这里,我在e9120bb0上提交了fix ui,然后就回到之前的提交上去了,但是没保存开始的commit id,所以不知道怎么回去,最后使用这个命令解决了。

如何把一个已经提交的commit,从一个分支放到另一个分支

➜  12345 git:(zyzz_1.4.0) git cherry-pick ba47bec0b0e07bef16f074526ad590d8ffdc01e7
[zyzz_1.4.0 42a00548] 移除tab上的小红点

git cherry-pick continue
git cherry-pick abort

这里加入openinstall后使用git cherry-pick的时候出现冲突了,问题和解决办法如下


根据提交记录看rebase的作用

➜ sky-forest-ios git:(zyzz_1.4.0_housetype) git checkout zyzz_1.4.0
Switched to branch 'zyzz_1.4.0'
➜ sky-forest-ios git:(zyzz_1.4.0) git rebase zyzz_1.4.0_housetype
之前zyzz_1.4.0上的提交记录如下



rebase以后的提交记录,下方红框中是zyzz_1.4.0_housetype的最新提交记录,上房红框是zyzz_1.4.0的最新提交记录。


block中循环引用,crash

这个界面就是加载两张大图片,获取到image后,根据image的size来重新调整UI,这里使用了

[UIImageView(WebCache) sd_setImageWithURL:placeholderImage:options:progress:completed:]

由于网络很慢,退出页面后还是在加载,然后在completed的block中使用了self,结果就闪退了。这里要处理一下。



下面是报错信息


presentedViewController与presentingViewController

presentedViewController表示当前用户正在操作的ViewController,presentingViewController表示被当前ViewController遮挡住的ViewController。

往collectionView上加view的时候注意frame

下面collectionView的背景色为蓝色,是加到content上



隐藏导航栏

self.navigationController.navigationBar.hidden = YES
不过要在viewWillAppear里面写,在viewDidLoad里面写没效果。

A页面进入B页面执行顺序

A -> viewWillDisappear
B -> viewWillAppear
A -> viewDidDisappear
B -> viewDidAppear

1. 修改状态栏文字颜色

  • 无导航栏
- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}
  • 有导航栏
    需要在UINavigationController子类里面重写childViewControllerForStatusBarStyle方法。然后再在controller里面加上preferredStatusBarStyle。
#import "ZYNavigationController.h"

@interface ZYNavigationController ()

@end

@implementation ZYNavigationController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (UIViewController *)childViewControllerForStatusBarStyle {
    return self.topViewController;
}

@end

2. UIButton中文字换行

UIButton *button =[[UIButton alloc]initWithFrame:CGRectMake(100, 100, 200, 40)];
button.backgroundColor = [UIColor redColor];
[button setTitle:@"我是Chenhaijian\n   我要换行" forState:UIControlStateNormal];
button.titleLabel.lineBreakMode = 0;//这句话很重要,不加这句话加上换行符也没用

3. Apple Mach-O Linker Error

全局变量重复定义的问题哦!也没有其他提示错误。


4. 修改远程分支

5. 打的包不能用问题解决

在自己电脑上面打出的包放到蒲公英上下载下来居然不能安装,打包过程中也没提示有问题,解决办法如下:

  1. 重新下载Provisioning Profiles,安装


  2. 安装过程提示有问题,点击reset-->Try again


6. 手势和UITableView上点击冲突

有个需求,是在UIView里面添加一个子视图UITableView,然后在UIView上添加了一个UITapGestureRecognizer,之后发现UITableView里的cell点击没有反应,经过查询资料发现解决方法:
1.首先设置UITapGestureRecognizer的代理
2.重写- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
这个方法询问delegate是否允许手势接收者接收一个touch对象,返回YES,则允许对这个touch对象审核,NO,则不允许。


7. Apple Mach-O Linker(Id) Error

rebase代码以后,运行不了,出现这个问题,如图



解决办法:你可以到Build Phases的Compile Source中看,找不到这个文件。所以到ParallaxTableViewCell从项目目录中删除,然后重新add进来即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,743评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,296评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,285评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,485评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,581评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,821评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,960评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,719评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,186评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,516评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,650评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,936评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,757评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,991评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,370评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,527评论 2 349

推荐阅读更多精彩内容