如何制作通用框架并被AppStroe接受

我认为现在该分享我制作通用框架的经验。 我将本教程分为两个部分:1.组合arm / arm64(对于设备)和i386 / x86_64(对于模拟器),2.使其被AppStore接受。

第一部分:将设备和模拟器结合到通用框架中,我认为有很多解决方案可以做到这一点,最流行,最优雅的解决方案是添加Run Script,而不是Xcode会为您结合设备和模拟器版本框架,但是我认为确实让新的iOS开发人员感到困惑,您只是粘贴了一些您不知道的代码,这是怎么回事,我的建议是不要这样做,您必须花一些时间来理解粘贴的每个代码,因此,首先我将展示如何组合它手动,那么我们将使用“运行脚本”而不是手动组合框架。

  1. 确保您的构建配置已发布(而非调试),您可以在编辑方案中进行设置。

2.在设备和模拟器中构建项目,为设备和模拟器生成框架,构建成功后,您可以看到在Products文件夹下有一个框架,右键单击它,选择在finder中显示,Xcode将为您显示文件。 让我们将Release-iphones和Release-iphonesimulator复制到您的Desktop或Documents中,无论您喜欢什么,只要确保容易找到该路径即可(我放入Documents中)。 您可以在HyProgressHUB.swiftmodule中看到几个i386 / x86_64(arm / arm64)文件,这是我们需要结合的文件。

3.我们需要将Release-iphoneos / HyProgressHUB.framework / HyProgressHUB和Release-iphonesimulator / HyProgressHUB.framework / HyProgressHUB这两个文件合并到Universal中,终端命令的意思是,lipo请为我将这两个文件合并到Release文件中。

  $ cd〜/ Documents $ lipo -create Release-iphoneos / HyProgressHUB.framework / HyProgressHUB Release-iphonesimulator / HyProgressHUB.framework / HyProgressHUB-输出Release-Universal / HyProgressHUB.framework / HyProgressHUB 

4.我们还需要将i386 / x86_64复制到如下所示的发行文件夹中

5.好了,完成了,现在您的框架可以在设备和模拟器上使用了。

6.因此,如何在“运行脚本”中执行该操作。 将下面的代码放到目标的运行脚本中,这很容易,请确保将“ HyProgressHUB”更改为您的框架。 Xcode将为您结合通用框架。

 #合并脚本 
#1
#设置bash脚本在任何命令失败时立即退出。
设置-e
#2
#设置一些常量供以后使用。
FRAMEWORK_NAME =“ HyProgressHUB”
#3
#如果存在先前版本的残余,请将其删除。
如果[-d“ $ {SRCROOT} / build”]; 然后
rm -rf“ $ {SRCROOT} / build”
科幻
#4
#构建设备和模拟器的框架(使用
#所有所需的架构)。
xcodebuild -target“ $ {FRAMEWORK_NAME}”-配置发布-arch arm64 -arch armv7 -arch armv7s only_active_arch = no define_module = yes -sdk“ iphoneos”
xcodebuild -target“ $ {FRAMEWORK_NAME}”-配置发布-arch x86_64 -arch i386 only_active_arch = no define_module = yes -sdk“ iphonesimulator”
#5
#如果先前运行的桌面上存在.framework文件,则将其删除。
如果[-d“ $ {HOME} / Desktop / $ {FRAMEWORK_NAME} .framework”]; 然后
rm -rf“ $ {HOME} / Desktop / $ {FRAMEWORK_NAME} .framework”
科幻
#6
#将框架的设备版本复制到桌面。
cp -r“ $ {SRCROOT} / build / Release-iphoneos / $ {FRAMEWORK_NAME} .framework”“ $ {HOME} / Desktop / $ {FRAMEWORK_NAME} .framework”
#7
#将框架内的框架可执行文件替换为
#通过将设备和模拟器的可执行文件与lipo合并而创建的新版本。
lipo -create -output“ $ {HOME} / Desktop / $ {FRAMEWORK_NAME} .framework / $ {FRAMEWORK_NAME}”“ $ {SRCROOT} / build / Release-iphoneos / $ {FRAMEWORK_NAME} .framework / $ {FRAMEWORK_NAME}” $ {SRCROOT} / build / Release-iphonesimulator / $ {FRAMEWORK_NAME} .framework / $ {FRAMEWORK_NAME}”
#8
#将模拟器的Swift模块映射复制到
#框架。 从步骤6开始,设备映射已经存在。
cp -r“ $ {SRCROOT} / build / Release-iphonesimulator / $ {FRAMEWORK_NAME} .framework / Modules / $ {FRAMEWORK_NAME} .swiftmodule /”“ $ {HOME} / Desktop / $ {FRAMEWORK_NAME} .framework / Modules / $ {FRAMEWORK_NAME} .swiftmodule“#9
#删除最新的版本。
如果[-d“ $ {SRCROOT} / build”]; 然后
rm -rf“ $ {SRCROOT} / build”
科幻

第二部分:在将应用程序提交给iTune-connect之前,应从发行文件夹(步骤4)中删除模拟器(i386 / x86_64),否则将收到ERROR ITMS-90087,ERROR ITMS-90209等。