iOS开发—常出现的警告和错误
(1)没有删除东西出现 *** is missing from working copy 警告⚠️
方法:Xcode->Preferences->Source->Enable Source Control 勾勾去掉
(2)出现 -fembed-bitcode is not supported on versions of iOS prior to 6.0 错误,是因为bit code不支持 iOS6.0之前的版本,所以直接把Bitcode 改为NO就可以了,具体如下图
修改 Bitcode(3)出现 Code signing is required for product type 'App Extension' in SDK 'iOS 10.1' 错误
(4)出现 Automatic Preferred Max Layout Width Bdfore iOS 8.0 警告⚠️
一般是在项目的xib文件(或storyboard中),这是Label的一个属性导致的,出现这个警告的原因;一般来说,勾选的时候,会自动设置一个宽度,这个宽度是label当前在xib中的宽度,对于多行label,意思即当label中的文字宽度大于这个宽度的时候,label会换行;
一般是因为项目的部署版本为7.0,但是label又没有勾选Explicit导致的,警告的意思即自动偏好宽度在8.0以前不适用,因此对于部署在7.0的项目,应该勾选.
勾选Explicit.png
(5)出现 Directory not found for option '**' 警告⚠️
这种提示,通常是由于添加了第三方SDK,但是后来改了个名字或者去掉了SDK,但是在
Build Settings----->Search Paths----->Library Search Paths 中仍然没有删除掉对应的路径,所以需要到Library Search Paths和Framework Search Paths中删除掉警告的路径,就OK了
(6)出现错误 linker command failed with exit code 1,
ld:'***' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
(7)出现错误 can't write output file: /** (No space left on device)
意思是没有多余的空间,把不需要的东西删除一些,电脑上多留点空间就可以了
(8)提交版本审核的时候,出现错误No suitable application records were found .Verify your bundle identtifier "**"is correct. 原因有可能有:
1.在application loader中没有选择正确的用户组
2.在iTunes Connect中少操作了一个步骤,app的状态还是“Ready for upload”,点击view Details,右下角或右上角有个Ready to Upload Binary,点击后app的状态变成waiting for upload。出现 prepare for upload 千万不要认为此时工作完成了,还差一步,如果此时你关闭了页面,准备最后一步,你会发现到时会出错的
(9)在上架的时候遇到:ERROR ITMS-90161: "Invalid Provisioning Profile. The provisioning profile included in the bundle (Bundle id名字) [Payload/.app(APP的名字)] is invalid. [Missing code-signing certificate]. A Distribution Provisioning profile should be used when submitting apps to the App Store. For more information, visit the iOS Developer Portal.",注意点及解决办法有:
- p12和mobileprovision都要是Distribution环境下的,并且mobileprovision一定要是App Store类型的才可以
- xcode - windows - organizer - 选中archive包,右键show in finder,找到安装包文件,右键显示包内容,把Products目录下的Application文件夹改名为Payload,修改info.plist文件 ApplicationProperties - ApplicationPath,把 Application/xx 改为 Payload/xx 重新上传即可。
(10)出现错误 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'。错误信息:
UICollectionView在初始化的时候必须指定一个布局,所以我们不能使用
UICollectionView *collectionView =[[UICollectionView alloc]init];
要修改成
UICollectionViewFlowLayout *flowLayout =[[UICollectionViewFlowLayout alloc]init];
UICollectionView *collectionView =[[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:flowLayout];
(11)在集成百度地图的时候,因为 “info.plist 中必须添加 Bundle display name”调用地图失败,需要添加 Bundle display name 选项,它是 真正显示到用户屏幕上的 App 名称,Bundle name 是 App 安装到 iOS 机子里的 App 文件夹名
增加配置.png(12)在使用友盟进行分享的时候,点击分享无效,打印error 为: Domain=UMSocialPlatformErrorDomain Code=2003 "(null)" UserInfo={message=webpageUrl must not nil or other type ❌错误
原因:没有设置分享的图片或者分享的图片没有数据
解决办法:添加分享的图片
(13)注册友盟,打印台出现——APIBase request didFailWithError ,并且白屏一段时间,是因为没有iOS9以上回调的方法没有添加
#pragma mark--友盟如果不加,iOS9以上的系统会白屏一段时间-仅支持iOS9以上系统,iOS8及以下系统不会回调,解决办法:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
在上面的方法中加入:
BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
if (!result) {
// 其他如支付等SDK的回调
}
return result;
(14)真机调试运行,显示 Success ,但是最后因为弹出——Unable to install “**”失败,原因以及解决办法:
因为失效的证书名字和有效的证书名字冲突,进入钥匙串中,把重名,但失效的证书删除,最直接的就是把所有失效的证书全部删除,重新运行就可以了
(15)真机调试的时候出现 process launch failed: timed out trying to launch app 提示,导致真机调试是失败,是因为没有设置好开发状态,把打包成 iPA 设置的状态改为开发状态
(16)在Xcode中实现全局搜索代码,注意左上角的配置是:Find——Text——Containing,如下图:
全局搜索.png(17)出现 ****** (No space left on device)错误,出现错误的原因是,设备上没有剩余空间,清理设备,腾出空余就可以了
(18)静态检测内存泄露Analyze--报:Value stored to 'dataArr' during its initialization is never read ,原因:一个对象,被分配了两块内存,导致一块内存空闲,出现了内存泄漏
解决办法:把被赋值对象的初始化删掉,只声名一个对象,然后把已经初始化好的对象,赋值给它
NSMutableArray *chooseImageArrays;
if ([resultImageIdArrays containsObject:@"测试"]) {
chooseImageArrays = deleteImageArrays;
}
(19) 在 JS 和 OC 进行交互的时候,出现 [JSValue length]: unrecognized selector sent to instance ** ❌错误。
原因: NSArray * parmArray = [JSContext currentArguments]; 这里数组装的是JSValue 类型的
解决办法:用 [parmArray[0] toString] 转化成对应的类型才再使用
(20)在使用友盟进行 QQ 分享的时候,出现 TencentOpenApi must be called at main thread ❌ 错误
原因:在进行分享的地方,是在线程操作的
解决办法:把分享转到主线程进行进行
(21)使用SVN工具 Cornerstone,在Check Out的时候,出现 The working copy can't be accessed because the format is not supported。❌错误,
原因:Cornerstone 的版本太低
解决办法:把 Cornerstone 可以兼容的版本调到最大
21.png
(22)iOS关于定位的认识Error Domain=kCLErrorDomain Code=2****。❌错误
原因:因为网络信号不好,换一个网络试一下