Xcode7打包,iOS9真机闪退,如何解决?

有些项目用xcode7打开运行,打包安装到iOS9设备上程序会闪退。
如果用xcode7以下编译,然后打包到iOS9的设备上就是正常的。这是为什么,关键是,怎么解决?

答:iOS9发布之后,有些app在新的系统下会经常出现闪退的情况,而官方也给了许多的适配与改变。以使用户体验更好。所以做为开发者怎样为自己维护的App做适配呢?

最快解决的方法肯定是使用Xcode7以下的编译打包。(笔者就是因为需求一直在催,所以果断用旧版Xcode5编译...555)

当然,如果一定要用Xcode7的话也可以解决,需要解决的步骤如下:

(1.)关于iOS9网络适配(HTTP 转 HTTPS)。

为了强制增强数据访问安全, iOS9 默认会把 所有的http请求都改为 HTTPS 请求。(HTTPS = HTTP+SSL/TLS+TCP)

解决这个变化带来的影响,有2个方案:

方案a:立即让公司的服务端升级使用TLS 1.2,以解析相关数据;

方案b:如果服务器无法升级改变,虽Apple不建议,但可通过在 Info.plist 中声明,倒退回不安全的网络请求依然能让App访问指定http,甚至任意的http。

本应用的根目录下的“info.plist”的文件需加下面的键值;简单粗暴地信任所有http服务器:

<key>NSAppTransportSecurity</key>
<dict>
    <!--Connect to anything (this is probably BAD)-->
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
或者不用代码,而在“info.plist”文件的属性列表上直接添加:

(2)bitcode,一种被编译程序的一种中间形式的代码。以后在Watch应用中必须包含Bitcode,iOS不强制,但Xcode7默认会开启Bitcode。

方案a:更新library使库中包含Bitcode,否则会出现以下中的警告;

(null): URGENT: all bitcode will be dropped because ‘/Users/myname/Library/Mobile Documents/com~apple~CloudDocs/foldername/appname/GoogleMobileAds.framework/GoogleMobileAds(GADSlot+AdEvents.o)‘ was built without 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. Note: This will be an error in the future.

方案b:简单粗暴,关闭Bitcode.

TAGRETS->Build Setting,右上角搜索“bitcode”,改为“No”;

(3).iOS9 URL Scheme 适配,引入白名单概念

在在info.plist里面增加可信任的调用app,否则回报如下错误:

-canOpenURL: failed for URL: "weixin://app/wx9c8771d3c07dfd30/" - error: "This app is not allowed to query for scheme weixin"
-canOpenURL: failed for URL: "wtloginmqq2://qzapp" - error: "This app is not allowed to query for scheme wtloginmqq2"

可在根目录的“info.plist”文件中加入“LSApplicationQueriesSchemes”数组:每个字段的url需要我们自己添加,如下图添加了包括微信微博等sdk的url(具体的其他方应用SDK会有相应说明):

(4)企业级分发

iOS9之前,企业级分发的操作很便捷,直接点击App出现的“信任”按钮即可,

而iOS9以后,企业级分发ipa包变得与Mac上dmg安装包安装时一样:默认不能安装,也不再出现“信任”这个按钮;

所以在我们的真机运行,安装到手机里面后第一次打开app。不会像以前提示,信任还是不信任该证书.

这个时候需要打开自己的设备上面的 设置-》通用-》描述文件-》企业级应用 中信任对应的企业开发者。这个也是iOS9的新特性;

时间: 2024-12-24 05:36:01

Xcode7打包,iOS9真机闪退,如何解决?的相关文章

XCode7免证书真机调试

今天博主有一个XCode7免证书真机调试的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 在Xcode 7中,苹果改变了自己在许可权限上的策略,此前Xcode只开放给注册开发者下载,但Xcode 7改变了这种惯有的做法,无需注册开发者账号,仅使用普通的Apple ID就能下载和上手体验. 此前开发者需每年支付99美元的费用成为注册开发者才能在iPhone和iPad真机上运行代码,苹果新的开发者计划则放宽要求,无需购买,只要你感兴趣同样可以在设备上测试app. 操作步骤: 1.进入xc

Xcode7.2如何真机调试iOS 9.3的设备

在测试iOS app或者是开发过程中,总会遇到各种各样的升级,比如XCode的升级,MAC OS 的升级,iOS系统升级,这种种升级,个人比较讨厌的是iOS系统的升级,它总是在你调试代码或者是测试过程中给你弹出一个对话框,如下图: 或许自己手抖一下,iPhone就开始默默的升级了...升级升吧,反正一会就装好了,待你升级到9.3.1,噩运也就开始了.当你拿着崭新的iOS系统去debug代码时,XCode会告诉你:你是9.3.1啊,我这XCode 7.2的系统不支持啊,你升级IDE吧.然后就是冷冰

Ubuntu64位下使用eclipse闪退的解决

打开eclipse将鼠标放在代码上等待代码提示的时候,直接闪退 错误如下: A fatal error has been detected by the Java Runtime Environment: SIGSEGV (0xb) at pc=0x00007f25d0b922a1, pid=3459, tid=139803099674368 JRE version: Java? SE Runtime Environment (7.0_60-b19) (build 1.7.0_60-b19) J

tomcat单独启动时闪退的解决办法,以及修改端口8080为80,

tomcat单独启动时闪退的解决办法: 点击" startup",马上就闪退了:原因一般都是没有配置%JAVA_HOME%和tomcat的环境变量造成的: 很简单: 在startup.bat那个文件下,编辑点进去之后,在最上边的echo off上面加上: SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_60 SET TOMCAT_HOME=C:\apache-tomcat-7.0.53 然后shutdown.bat里面也要加上这两句话: 然后重

iOS打包Framework真机和模拟器兼容合并版本 - 详细攻略步骤

打包Framework,测试时: 1.用模拟器打包,测试时只能跑在模拟器 2.用真机打包,测试时只能跑在真机 那么怎么做到一个版本兼容以上两种场景呢? 解决如下: 1.打开终端 2.输入   lipo -create [模拟器打包path] [真机打包path] -output [导出兼容版本path] =======================  示例  Demo========================== 准备前提: -- 假设我们包已经完成,并在模拟器和真机都能编译通过. --

XCode7 Beta版无法使用iOS8.4真机调试的的解决办法

在XCode7 Beta下如果使用iOS8.4版的真机进行调试,XCode会提示: “Could not find Developer Disk Image” 解决方法: 如果你有XCode6.4版,进入 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 将8.4文件夹 拷贝到目录: /Applications/Xcode-beta.app/Contents/Developer

IOS IPA打包和真机测试

要想用真机测试 App,涉及到4个概念: Certificates(凭证)表示你是一个合法的开发者,即你注册了开发者账号,凭证包含了你的姓名,邮箱,凭证类型等信息. Identifiers(标识)指的是 App 的唯一标识. Devices(设备)即手机设备,每个手机都具有不同的 UDID,就像我们的身份证号. Profiles(配置)即将 Certificates(凭证),Identifiers(标识)和Devices(设备)整合到一起的一个配置文件. 步骤:(参考:http://jingya

Xcode6 打包ipa真机测试

我们在用Xcode打包ipa进行真机测试的时候,突然发现明明选择了在AppStore上的证书和描述文件,但是在导出的时候就不一样了,还找不到自己制作的那个证书, 查阅资料发现给出的是这样的解释: 在xcode6中, 必须去申请 ad hoc的 distribution的证书, 才能在打ad hoc包时,选择这个证书,否则,推送的时候,使用sanbox中的development证书,是没法推送.猜测的原因, 估计是xcode6中把 测试apns 的权限收紧了吧,不过想想也是, 你既然大ad hoc

Xcode7 免证书真机测试

Xcode很早就有个免证书测试,今天我自己也测试了一把,还是挺好用的,接下来,我就说一下我的大体过程: 注意:一定要让你的真机设备的系统版本和app的系统版本想对应,如果不对应就会出现一个很常见的问题:could not find developer disk image 工具/原料 MAC版本:OSX10.10或者以上 Xcode版本:Xcode7或者以上 方法/步骤 1. 首先先安装Xcode7,并且运行Xcode,点击左上角菜单Xcode -> Preferences. 2. 点击Acco