无论是是整个xcode工程还是将部分代码打包Framework 方法是一致的,对于AppDelegate来讲,不要包含进去即可
1.创建Framework的target
选择Targets中的+ --> iOS -->Cocoa Touch Framework --> Next
图例1.png
对于使用了Cocoapod导入第三方的xcode工程来讲 需要在Podfile中 做如下修改 之后 pod install
需要同时对住工程target 和Framework的target 配置pod环境
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
use_frameworks!
target 'xxx' do
react_native_path = "./ReactNative/node_modules/react-native"
pod "React", :path => react_native_path,:subspecs => [
'Core',
'RCTText',
'RCTImage',
'RCTLinkingIOS',
'RCTSettings',
'RCTVibration',
'RCTGeolocation',
'RCTActionSheet',
'RCTNetwork',
'RCTWebSocket'
]
pod "Yoga", :path => "#{react_native_path}/ReactCommon/yoga"
pod 'Masonry', '1.0.2'
pod 'FMDB', '2.6.2'
pod 'MJExtension', '3.0.13'
pod 'MJRefresh', '3.1.12'
pod 'AFNetworking', '3.1.0'
pod 'SVProgressHUD', '2.1.2'
pod 'TZImagePickerController', '1.7.8'
pod 'BeeCloud', '3.6.1'
pod 'HyphenateLite','3.3.2'
pod 'EaseUILite', :git =>'https://github.com/easemob/easeui-ios-hyphenate-cocoapods.git’,:tag => '3.3.2'
pod 'BaiduMapKit' #百度地图SDK
pod 'EDStarRating', '1.1'
pod 'ReactiveObjC', '3.0.0' #测试使用
end
target ‘xxx_Framework’ do
react_native_path = "./ReactNative/node_modules/react-native"
pod "React", :path => react_native_path,:subspecs => [
'Core',
'RCTText',
'RCTImage',
'RCTLinkingIOS',
'RCTSettings',
'RCTVibration',
'RCTGeolocation',
'RCTActionSheet',
'RCTNetwork',
'RCTWebSocket'
]
pod "Yoga", :path => "#{react_native_path}/ReactCommon/yoga"
pod 'Masonry', '1.0.2'
pod 'FMDB', '2.6.2'
pod 'MJExtension', '3.0.13'
pod 'MJRefresh', '3.1.12'
pod 'AFNetworking', '3.1.0'
pod 'SVProgressHUD', '2.1.2'
pod 'TZImagePickerController', '1.7.8'
pod 'BeeCloud', '3.6.1'
pod 'HyphenateLite','3.3.2'
pod 'BaiduMapKit' #百度地图SDK
pod 'EaseUILite', :git =>'https://github.com/easemob/easeui-ios-hyphenate-cocoapods.git’,:tag => '3.3.2'
pod 'EDStarRating', '1.1'
pod 'ReactiveObjC', '3.0.0' #测试使用
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
end
end
2.build Setting 设置
选择工程文件>target第一项>Build Setting>搜索linking,然后几个需要设置的选项都显现出来,首先是Dead Code Stripping设置为NO,网上对此项的解释如下,大致意思是如果开启此项就会对代码中的”dead”、”unreachable”的代码过滤,不过这个开关是否关闭,似乎没有多大影响,不过为了完整还原framework中的代码,将此项关闭也未曾不可。
The resulting executable will not include any “dead” or unreachable code
然后将Link With Standard Libraries关闭,我想可能是为了避免重复链接
最后将Mach-O Type设为Static Library,framework可以是动态库也可以是静态库,对于系统的framework是动态库,而用户制作的framework只能是静态库。
开始将下图中的build Active Architecture only选项设为YES,导致其编译时只生成当前机器的框架,将其设置为NO后,发现用模拟器编译后生成的framework同时包含x86_64和i386架构。不过这个无所谓,我们之后会使用编译脚本,脚本会将所有的架构全包含
图例4.pngHeader中将需要暴露的头文件暴露出去,Complie Sources 中需要编译的xxxx.m源文件添加进去
图例5.png3.向外暴露引用文件
build Phases 中header只是声明那些文件可以在外部可以被引用
在framework目录下的.h 文件中讲需要暴露出去的头文件声明一下
否则在引用的时候会出现如下 Miss submodule 'xxxxx.xxxx.h'的警告
图例7.png
4.编译
编译成功之后 xxx.framwork 即变为黑色 show in finder 就会看到
图例8.pngshow in finder 如下
Debug-iphoneos 为Debug模式下真机使用的
Debug-iphonesimulator 为Debug模式下模拟器使用的
Release -iphoneos 为Release模式下真机使用的
Release-iphonesimulator 为Release模式下模拟器使用的
5.framework框架
1.检查framework支持的框架
使用 lipo -info 即可查看 framework所支持的架构
lipo -info xxx_Framework
Architectures in the fat file: xxx_Framework are: armv7 arm64
2.合并framework
使用lipo -create xxx xxx -output xxx 即可将支持单个架构的framework融合成一个支持多种架构的framework
MacBook-Pro:Products $ lipo -create /Users/sqq/Library/Developer/Xcode/DerivedData/xxxx-ahamypgonskszeeayqaqqzajlxvq/Build/Products/Release-iphoneos/PTYL_Client_Framework.framework/PTYL_Client_Framework /Users/sqq/Library/Developer/Xcode/DerivedData/xxxx-ahamypgonskszeeayqaqqzajlxvq/Build/Products/Release-iphonesimulator/PTYL_Client_Framework.framework/xxxx -output xxx
MacBook-Pro:Products $ ls
Debug-iphoneos xxxx Release-iphonesimulator
Debug-iphonesimulator Release-iphoneos Release-universal
MacBook-Pro:Products $ lipo -info xxx
Architectures in the fat file: xxxx are: armv7 i386 x86_64 arm64
最后将output 生成的 文件 复制到Debug-iphoneos 或者Debug-iphonesimulator 任意一个下面的framework目录下 即可
这个很重要
完毕
这里为手动合并框架,下一篇将介绍如何自动合并
下一篇
Xcode8 下 Framework 打包(二)自动打包脚本创建过程
网友评论