iOS9存在的坑

自从更新到xcode7,遇到了不少问题。
HTTP
屏幕快照 2016-03-08 下午6.12.08
iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一使用TLS 1.2 SSL。采用TLS 1.2 协议,目的是 强制增强数据访问安全,而且 系统 Foundation 框架下的相关网络请求,将不再默认使用 Http 等不安全的网络协议,而默认采用 TLS 1.2。服务器因此需要更新,以解析相关数据。如果还要使用http时,需要在info.plist中加入下面这几行代码:
—————————————————————-
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
 —————————————————————
Location
我们在iOS9之后使用locationManager时,会出现运行错误。

Assertion failure in -[CLLocationManager setAllowsBackgroundLocationUpdates:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/CoreLocationFramework_Sim/CoreLocation-1861.0.23/Framework/CoreLocation/CLLocationManager.m:605

Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘Invalid parameter not satisfying: !stayUp || CLClientIsBackgroundable(internal->fClient)’

在使用location时,如果想要locationManager在后台执行,在iOS9中需要在info.plist中加入下面这几行代码:
—————————————————————————
<key>NSLocationAlwaysUsageDescription</key>
<string>LocationDemo</string>
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
 ————————————————————————-
屏幕快照 2016-03-09 下午2.25.00

Bitcode

Bitcode is an intermediate representationof a compiled program. Apps you upload to iTunes Connect that contain bitcodewill be compiled and linked on the App Store. Including bitcode will allowApple to re-optimize your app binary in the future without the need to submit anew version of your app to the store.
说的是bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化程序的二进制文件,而不需要重新提交一个新的版本到App Store上。
 Bitcode. When you archive for submission tothe App Store, Xcode will compile your app into an intermediate representation.The App Store will then compile the bitcode down into the 64 or 32 bitexecutables as necessary.
在应用打包传到AppStore的时候,xcode会把应用编译成一种中间代码bitcode,不是二进制可执行性的代码。AppStore会按照bitcode编译成64位或32位可执行代码。

Bitcode配置

在上面的错误提示中,提到了如何处理我们遇到的问题:

You must rebuild it with bitcode enabled(Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, ordisable bitcode for this target. for architecture arm64

要么让第三方库支持,要么关闭target的bitcode选项。

实际上,在Xcode 7中,我们新建一个iOS程序时,bitcode选项默认是设置为YES的。我们可以在”Build Settings”->”Enable Bitcode”选项中看到这个设置。不过,我们现在需要考虑的是三个平台:iOS,Mac OS,watchOS。

对于iOS,bitcode是可选的;对于watchOS,bitcode是必须的;而Mac OS是不支持bitcode。

如果我们开启了bitcode,在提交包时,下面这个界面也会有个bitcode选项:

1.如果我们之前的代码没有使用bitcode,那么在新的xcode7中编译是通不过的。

2.如果我们使用第三方库或者是打包的静态库.a或者是动态framework没有使用bitcode的话,那么我们新建的xcode7中使用的.a或framework。

解决办法:Bitcode要么都用要么都不用。
url scheme
在iOS9中也有些不同,在iOS9中如果使用url scheme 必须要在info.plist文件中添加一些必要的设置,需要把我们外部调用的 url scheme设置为白名单
调用实例:
LSApplicationQueriesSchemes  urlscheme1 urlscheme2
例如:将微信,支付宝加入白名单,需要在info.plist里面加入以下代码:

<key>LSApplicationQueriesSchemes</key>

<array>

<!–微信 URL Scheme 白名单–>

<string>wechat</string>

<string>weixin</string>

<!– 支付宝  URL Scheme 白名单–>

<string>alipay</string>

<string>alipayshare</string>

</array>

字体
iOS9中文字显示不全,会有…效果。
分享到: 更多
Separator image Posted in IOS.