近期公司有埋点需求,需要自己搭一个埋点框架,于是就自己动手制作一个framework供业务线的小伙伴使用
新建Framework工程
新建Workspace
在当前打开的Framework工程下,File -> New -> Workspace,名称和当前Framework同名,保存在Framework根目录下
在当前的Workspace窗口下,File -> Add Files to "HHTestSDK",选中HHTestSDK.xcodeproj添加
当前Workspace目录结构
新建demo工程
在当前Workspace窗口下,File -> New -> Project -> App,新建demo工程,保存在Framework根目录下
回到Workspace下,File -> Add Files to "HHTestSDK",选中HHTestSDK_example下的HHTestSDK_example.xcodeproj文件添加
准备工作都做好了,接下来就是开发了
编译
一通操作开发完毕后,就需要Build生成.framework文件了 按网上的教程,需要生成模拟器版本的和真机版本的,分别编译
然后把编译的可执行文件合并
sudo lipo -create ./Release/HHTrackSDK.framework/HHTrackSDK ./Release-simulator/HHTrackSDK.framework/HHTrackSDK -output ./HHTrackSDK
合并的可执行文件再替换到真机对应的framework下,这样就能对应真机和模拟器平台了。 但是这时候就遇到了第一个问题
have the same architectures (arm64) and can't be in the same fat output file
这是因为,真机的framework和模拟器的framework有重合的指令集,解决办法就是在Build Settings中,找到Excluded Architectures,在Release下,添加arm64,排除掉重合的部分。
合并后的包测试工程编译报错
Xcode error 'building for iOS Simulator, but linking in dylib built for iOS .. for architecture arm64' 还是architectures的问题,这个报错网上找了也没有很好的解决方案,这时候换了一种思路,从XCFramework入手,这个是苹果新推出的一种格式,支持苹果所有的平台和架构。从根本上解决前面出现的问题
xcodebuild -create-xcframework -framework ./Release/HHTrackSDK.framework -framework ./Release-simulator/HHTrackSDK.framework -output ./HHTrackSDK.xcframework
打出的包导入到项目中后,需要把Embed设置成Embed & Sign,然后就可以使用了。
静态库分类方法没有执行
需要在主工程Build Settings -> Other Linker Flags 里面添加 -ObjC 声明即可