iOS 常见的 error

  • 3 search path

    1 https 支持

    • 系统打印:并不会崩溃 error
      App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.
      Temporary exceptions can be configured via your app's Info.plist file.**

    • 提示也非常明确,在 info.plist 中 添加 App Transport Security Settings 并添加 Allow Arbitrary Loads = YES
      也可以这样添加:Open As Source Code:

     <key>NSAppTransportSecurity</key>
     <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
     </dict>
    
    • 如果需要对某些网址 http,需要具体分别设置,而不是想上面那样全部http

    2 armv7,armv7s,arm64 相关

    • arm处理器的指令集,具体深入也并不是很了解,主要是在添加其他库文件是,可能导致编译不通过。可能出现的报错:
    Undefined symbols for architecture x86_64:
    //x86_64,armv7,arm64..
    
    • x86_64:模拟器64位,表示添加的文件不支持x86_64,需要重新添加个支持模拟器的,或者直接真机调试吧。
    • arm64:真机64位,iphone5S、iPad Air、mini2 以上都是这个吧。
    • armv7/armv7s:更早版本。

    在Build Srtting 中,Architectures中有一些设置,一般情况下不需要修改,有问题都是因为第三方拖入文件的事。其中Architectures 对打包文件的大小有影响,越多,越大,每一种都要生产对应的指令集的二进制包,因为可以向下兼容,所有对性能不要求的话只要armv7,就能凑活了。

    3 search path

    • 在添加其他文件例如 .a 时,可能会出现
    ld: library not found for -XXXXXX
    
    • 主要原因就是路径错误,找不到文件,Build Setting 中 修改 Library Search Path 添加XXX 文件路径。
    $(inherited)     一般第一行都是这个,据说是从 framworks 读取,请教大神。
    
    $(PROJECT_DIR) 对应 /Users/name/somewheres/prejectname(工程包相对路径)/后面还可以跟具体文件夹文件路径XXX.a
    这个相对路径比较重要!
    
    • 类似的 framwork/header Seacrh Path 也是一样的。

    4 other link flag

    • 在添加其他文件例如.a时,编译通过,但是运行时可能出现
    selector not recognized
    
    • 链接器,具体也不是很明白,大致是编译之后,链接目标文件与库形成执行文件。可能会用到下面几个参数
    -ObjC:将OC类添加到执行文件,但是可能添加多余没用的文件,但是可以解决很多相关问题。如果还不行就用下面-force_load
    -all_load:最好不要用,可能导致重复链接
    -force_load :后面跟相对文件路径,是比较好的方式。
    

    5 bitcode

    • 有时候,在添加第三方SDK的时候,模拟器OK,但是真机调试时会遇到
    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
    
    • 这个根据翻译很好理解,就是 Build Setting bitcode 设置为 NO。
    • 这个bitcode,大致用于打包上传appStore是形成中间二进制文件,减少上传时app包大小。一般情况下,很多第三方SDK不支持bitcode,所以设置NO吧,跟https一样。
    • iOS是可选YES/NO。而watchOS,必须YES。

    6 scheme

    • 白名单,调用检查其他App需要添加 NSArray 类:LSApplicationQueriesSchemes 添加打印的那些 error,下面一些常见的复制粘贴过来凑数:其他还有很多。一般在继承文档都有说明。
    <key>LSApplicationQueriesSchemes</key> 
    <array> <!-- 微信 URL Scheme 白名单--> 
    <string>wechat</string> 
    <string>weixin</string> 
    
    <!-- 新浪微博 URL Scheme 白名单--> 
    <string>sinaweibohd</string> 
    <string>sinaweibo</string> 
    <string>sinaweibosso</string> 
    <string>weibosdk</string> 
    <string>weibosdk2.5</string> 
    
    <!-- QQ、Qzone URL Scheme 白名单--> 
    <string>mqqapi</string>
     <string>mqq</string> 
    <string>mqqOpensdkSSoLogin</string> 
    <string>mqqconnect</string> 
    <string>mqqopensdkdataline</string> 
    <string>mqqopensdkgrouptribeshare</string> 
    <string>mqqopensdkfriend</string> 
    <string>mqqopensdkapi</string> 
    <string>mqqopensdkapiV2</string> 
    <string>mqqopensdkapiV3</string> 
    <string>mqzoneopensdk</string> 
    <string>wtloginmqq</string> 
    <string>wtloginmqq2</string> 
    <string>mqqwpa</string> 
    <string>mqzone</string> 
    <string>mqzonev2</string> 
    <string>mqzoneshare</string> 
    <string>wtloginqzone</string> 
    <string>mqzonewx</string> 
    <string>mqzoneopensdkapiV2</string> 
    <string>mqzoneopensdkapi19</string> 
    <string>mqzoneopensdkapi</string> 
    <string>mqzoneopensdk</string> 
    
    <!-- 支付宝 URL Scheme 白名单--> 
    <string>alipay</string> 
    <string>alipayshare</string>
    </array>