主题
问题1:动态库包签名问题。
问题2:动态库包含模拟器代码在接入方上传AppStore时出现无效的X86_64\i386错误。
问题3:bundle中plist中bundle id与动态库bundle id冲突。
问题4:动态库minOSVersion问题。
解决方案
我写的SDK使用动态包的技术进行打包,目前市面上基本很少有人使用此方式来打包,再加上苹果对动态包暧昧的态度,使得这一块可查的资料相当的少。
在商户APP接入我们SDK后提交APPStore时,机检报出若个错误及警告。而静态包则无此问题。
问题1:动态库包签名问题
分析:
同时通过codesign命令打印静态包签名信息发现:静态包不包含任何签名信息。这意味着静态包是在编译连接后和目标APP在发布时一起被签名。
解决思路:
使用developer证书替代distribute证书签名,使得商户在上传的时候,XCode会使用商户自己的distribute证书进行重签名。
问题2:动态库包含模拟器代码在接入方上传AppStore时出现无效的X86_64\i386错误
分析:
通过使用静态包和动态包在编译连接时的比对发现,静态包在发布release版本编译器连接时会自动的将x86&i386架构的二进制码剔除。
解决思路,在打包过程中,不要把x86,i386架构与发布的arm架构二进制码合并。
问题3:bundle中plist中bundle id与动态库bundle id冲突
在SDK制作过程中,难免要使用bundle来组织SDK用到的xib,image,p12等资源文件。在系统默认bundle会附带描述bundle的plist,这个info.plist处理不好,内面的内容会和Framework冲突。而在bundle制作过程中,xcode并不会也不需要对bundle做签名。这意味着,我们可以删减bundle的内容, 而不会导致验签错误。
解决办法:右键显示包内容,直接将info.plist删除。
问题4:动态库minOSVersion问题
我们的Framework是从ios6开始支持的。而在商户app接入我们的动态库进行提交appStore时,提示minOSVersion=6.0是无效的值。
解决思路:在我尝试,更改为8.0后,对支持低版本的APP完全没问题,只是在这里会验证一下。