Xcode7.1与iOS9出现的异常bug
2016-01-28 18:31
381 查看
适配iOS9要做的事:
1.更改http为https
两种方案:
一.公司后台服务器更改;
二.作为开发者,可在Xcode暂时退回到http协议. 开发者更改方法如下:
1.在Info.plist中添加App Transport Security Settings (或NSAppTransportSecurity), 类型Dictionary。
2.在App Transport Security Settings下添加Allow Arbitrary Loads (或NSAllowsArbitraryLoads), 类型Boolean,值设为YES.
2.对于使用ShareSDK第三方登录或分享,对iOS9的适配
可参考官方文档详细介绍:http://wiki.mob.com/ios9-对sharesdk的影响(适配ios-9必读)
包括:https协议支持,关闭bitcode支持,添加Scheme白名单.
您的 App 正在使用广告标识符 (IDFA)。您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件。
ShareSDK里面自带sina的原生SDK, 要删掉SDK extend里面 sina的所有文件, 再打包上传就可以. (删掉后新浪微博还可以分享)
可用终端命令:
grep -r advertisingIdentifier .
检测这个.a文件
3.Xcode7报错:Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:]
从iOS9开始,Xcode7需要所有UIWindow在makeKeyAndVisible之前必须有一个rootViewController,否则报以上错误。
解决方案:
UIViewController *emptyView = [[UIViewController alloc] init];
self.window.rootViewController = emptyView;
[self.window makeKeyAndVisible];
4.Xcode7打开旧项目FrameWork文件夹下的.dylib库缺失,添加方法
项目Target中Link Binary With Libraries 点击下方 “+”添加, 显示搜索页面,在此搜.dylib搜不出来(只能搜到同名的.tbd), 需点击 Add Other,出现文件目录页面 (正常情况通过Finder同样找不到.dylib文件,因该文件是隐藏文件。需按快捷键 CMD+Shift+G,输入/usr/lib后进入隐藏界面,然后添加需要的.dylib即可。
5.Xcode7 真机测试,真机出现"unavailable"字样,Could not find developer disk image.
stackoverflower答案:http://stackoverflow.com/questions/30736932/xcode-error-could-not-find-developer-disk-image
解决方案:
先关闭Xcode.再从Xcode 6.4中,拷贝8.4 (12H141)文件夹到Xcode 7的对应目录下.
Xcode 6.4路径为:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
Xcode 7路径为:
/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
重新打开Xcode 7,打开项目,需要等一会,等到菊花不转了,才能运行。
6.App上传Appstore错误
ERROR ITMS-90049:"This bundle is invalid. The bundle identifier contains disallowed characters. [See the section of the Application
Programming Guide entitled The Application Bundle.]"
解决方案:
在项目导航栏搜索Info.plist文件
查找第三方的info.plist文件,如ShareSDK中的腾讯Bundle文件下的Info.plist文件。
在该文件下添加或者修改以下几个字段:
Bundle version
Bundle identifier
Bundle versions string, short
需要和系统自带的Info.plist文件一样。 如下图
7.App上传Appstore错误
“invalid package
Applications built with SDK 9.0 or later must be packaged as proper IPA files.”
解决方案:
按照错误提示原先上传的是.zip文件,现在需要上传 .ipa文件。也就是需要将打包成的app在打包成ipa文件就可以了。
具体步骤:
1、新建文件夹 Payload
2、将xcode编译好的app放在Payload文件夹中
3、压缩Payload文件夹为 .zip文件,然后重命名为 .ipa 重新上传即可
附快捷shell脚本: 将脚本放在Release-iphones文件夹下,运行该脚本就可将app转换为ipa。
8.App上传Appstore错误
ERROR ITMS-90535 Unexpected CFBundleExecutable Key.
解决方案:
1,用XCode 6.4的Product -> Archive,再提交到AppStore。
2,在Stackoverflow上也有相关的解决办法,就是把无用的CFBundle删除掉。点击查看
在工程里面搜索info.plist,可以先搜索info,找到第三方的info.plist文件,删除里面的Executable file对应的一整行,包括值。
例如:找到腾讯的info.plist
删除箭头指向的一行,即可.
9.未解决问题,哪位大神看到
<1> 真机运行启动时崩溃,并非100%出现,出现率在80%左右,不清楚是什么原因,有知道的解答一下或者给个思路
dyld`gdb_image_notifier:
-> 0x2be590cc <+0>:
bx lr
在网上看到的答案:
选 Project,然后进 BuildPhases,然后进 LinkBinaryWithLibraries. 找到 GLKit.Framework ,把它的 status 更改为 optional 就 ok.(如果没有GLKit.Framework, 添加一个再设置)
因bug无法重现,无法验证以上方法是否可行. (有同行伙伴亲测此方法可行)
<2>Xcode7.1真机测试启动崩溃,模拟器正常,添加Enable Address Sanitizer调试,崩溃在启动页.
libclang_rt.asan_ios_dynamic.dylib`__asan::AsanDie:
-> 0x5e8240 <+0>: push {r4, r5, r7, lr} //代码崩溃在此行
0x5e8242 <+2>: add r7, sp, #0x8
0x5e8244 <+4>: dmb ish
打印信息如下:
AddressSanitizer debugger support is active. Memory error breakpoint has been installed and you can now use the 'memory history' command.
==891==Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING.
==891==ASan shadow was supposed to be located in the [0x3ffff000-0x5fffffff] range.
==891==Process memory map follows:
------后面部分省略
目前的解决办法:
打开
把Enable Address Sanitizer 取消
1.更改http为https
两种方案:
一.公司后台服务器更改;
二.作为开发者,可在Xcode暂时退回到http协议. 开发者更改方法如下:
1.在Info.plist中添加App Transport Security Settings (或NSAppTransportSecurity), 类型Dictionary。
2.在App Transport Security Settings下添加Allow Arbitrary Loads (或NSAllowsArbitraryLoads), 类型Boolean,值设为YES.
2.对于使用ShareSDK第三方登录或分享,对iOS9的适配
可参考官方文档详细介绍:http://wiki.mob.com/ios9-对sharesdk的影响(适配ios-9必读)
包括:https协议支持,关闭bitcode支持,添加Scheme白名单.
您的 App 正在使用广告标识符 (IDFA)。您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件。
ShareSDK里面自带sina的原生SDK, 要删掉SDK extend里面 sina的所有文件, 再打包上传就可以. (删掉后新浪微博还可以分享)
可用终端命令:
grep -r advertisingIdentifier .
检测这个.a文件
3.Xcode7报错:Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:]
从iOS9开始,Xcode7需要所有UIWindow在makeKeyAndVisible之前必须有一个rootViewController,否则报以上错误。
解决方案:
UIViewController *emptyView = [[UIViewController alloc] init];
self.window.rootViewController = emptyView;
[self.window makeKeyAndVisible];
4.Xcode7打开旧项目FrameWork文件夹下的.dylib库缺失,添加方法
项目Target中Link Binary With Libraries 点击下方 “+”添加, 显示搜索页面,在此搜.dylib搜不出来(只能搜到同名的.tbd), 需点击 Add Other,出现文件目录页面 (正常情况通过Finder同样找不到.dylib文件,因该文件是隐藏文件。需按快捷键 CMD+Shift+G,输入/usr/lib后进入隐藏界面,然后添加需要的.dylib即可。
5.Xcode7 真机测试,真机出现"unavailable"字样,Could not find developer disk image.
stackoverflower答案:http://stackoverflow.com/questions/30736932/xcode-error-could-not-find-developer-disk-image
解决方案:
先关闭Xcode.再从Xcode 6.4中,拷贝8.4 (12H141)文件夹到Xcode 7的对应目录下.
Xcode 6.4路径为:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
Xcode 7路径为:
/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
重新打开Xcode 7,打开项目,需要等一会,等到菊花不转了,才能运行。
6.App上传Appstore错误
ERROR ITMS-90049:"This bundle is invalid. The bundle identifier contains disallowed characters. [See the section of the Application
Programming Guide entitled The Application Bundle.]"
解决方案:
在项目导航栏搜索Info.plist文件
查找第三方的info.plist文件,如ShareSDK中的腾讯Bundle文件下的Info.plist文件。
在该文件下添加或者修改以下几个字段:
Bundle version
Bundle identifier
Bundle versions string, short
需要和系统自带的Info.plist文件一样。 如下图
7.App上传Appstore错误
“invalid package
Applications built with SDK 9.0 or later must be packaged as proper IPA files.”
解决方案:
按照错误提示原先上传的是.zip文件,现在需要上传 .ipa文件。也就是需要将打包成的app在打包成ipa文件就可以了。
具体步骤:
1、新建文件夹 Payload
2、将xcode编译好的app放在Payload文件夹中
3、压缩Payload文件夹为 .zip文件,然后重命名为 .ipa 重新上传即可
附快捷shell脚本: 将脚本放在Release-iphones文件夹下,运行该脚本就可将app转换为ipa。
ERROR ITMS-90535 Unexpected CFBundleExecutable Key.
解决方案:
1,用XCode 6.4的Product -> Archive,再提交到AppStore。
2,在Stackoverflow上也有相关的解决办法,就是把无用的CFBundle删除掉。点击查看
在工程里面搜索info.plist,可以先搜索info,找到第三方的info.plist文件,删除里面的Executable file对应的一整行,包括值。
例如:找到腾讯的info.plist
删除箭头指向的一行,即可.
9.未解决问题,哪位大神看到
<1> 真机运行启动时崩溃,并非100%出现,出现率在80%左右,不清楚是什么原因,有知道的解答一下或者给个思路
dyld`gdb_image_notifier:
-> 0x2be590cc <+0>:
bx lr
在网上看到的答案:
选 Project,然后进 BuildPhases,然后进 LinkBinaryWithLibraries. 找到 GLKit.Framework ,把它的 status 更改为 optional 就 ok.(如果没有GLKit.Framework, 添加一个再设置)
因bug无法重现,无法验证以上方法是否可行. (有同行伙伴亲测此方法可行)
<2>Xcode7.1真机测试启动崩溃,模拟器正常,添加Enable Address Sanitizer调试,崩溃在启动页.
libclang_rt.asan_ios_dynamic.dylib`__asan::AsanDie:
-> 0x5e8240 <+0>: push {r4, r5, r7, lr} //代码崩溃在此行
0x5e8242 <+2>: add r7, sp, #0x8
0x5e8244 <+4>: dmb ish
打印信息如下:
AddressSanitizer debugger support is active. Memory error breakpoint has been installed and you can now use the 'memory history' command.
==891==Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING.
==891==ASan shadow was supposed to be located in the [0x3ffff000-0x5fffffff] range.
==891==Process memory map follows:
------后面部分省略
目前的解决办法:
打开
把Enable Address Sanitizer 取消
相关文章推荐
- iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT方法总结
- ios 建立私有的 pod 仓库
- iOS字符串比较(区分与不区分大小写比较)
- iOS-如何在工程内添加pch预编译头文件
- iOS自带分享
- 在iOS中接入Bugly来拦截崩溃
- iOS图片上传
- iOS 整体框架类图
- iOS JSON NSString Convert to NSDictionary
- 苹果开发的一点小总结(1)
- iOS-NSRange NSMakeRange(location,length)介绍
- iOS证书配置及详解
- iOS 开启子线程并并回到主线程
- ios 原生sdk 识别图片中的二维码
- 一个tableView的Cell中有两个点击按钮及tableView的重用
- iOS开发之旅--_isa和_imp指针
- iOS 视图在不同View之间的切换(对于convertRect:函数的一些理解)
- 我常去逛的iOS干货文章、blog等【持续更新】
- iOS 开发技术牛人博客
- iOS---Foundation(NSDecimalNumber.h)