1.在原工程新建一个target为framework类型。
2.由于Appdelegate不能同名,要新创建一个FAppdelegate。
3.pch文件也要新建,并且不能交叉引用原来的Appdelegate,pch
4.新的target中添加Compile Sources 注意要添加的是FAppdelegate,不能引用原来的Appdelegate
还有原来的arc mrc混编的要加-fno-objc-arc
5.新的target中添加headers,注意FAppdelegate.h引用的都得加上
6.新的target中添加的库:(注意 :如果制作静态库 需要把tbd找到其dylib才能添加)
libz.tbd libiconv.tbd libc++.tbd libc++abi.tbd VideoToolbox QuartzCore Security CoreLocation CoreGraphics CFNetwork SystemConfigu CoreImage ImageIO AudioTool CoreMedia AVFounda CoreVideo CoreTelephony AddressBook AddressBookUI libresolv.9.tbd MessageUI CoreBluetooth CoreAudio CoreText libicucore libxml2.2.tbd CoreMotion JavaScriptCore LocalAuthentication libxml2.tbd Photos.f AssetsLibrary.f WebKit.f libsqlite3.tb libz.1.2.5.t libiconv.2.4.0 libbz2 libresolv7.添加资源文件类型:
png .xcassets .xib .bundle .jpg .json .plist .storyboard .html .txt .db .wav8.other link flag , framework searchpath ,library search path
other link flag : 一次复制过去就可以用!!! -ObjC -l"xml2" -framework "CoreGraphics" -lstdc++ -w $(inherited) framework searchpath $(inherited) $(PROJECT_DIR)/Libriary $(PROJECT_DIR) $(PROJECT_DIR)/Libs/HighMoralMap $(PROJECT_DIR)/Libs9.编译报错:原来是DT第三库引用的时候左边双引号右边尖括号
10.关闭bitcode
11.将生成的framework导回原工程,调用方法
12.这样两个基本一样的工程就合成一个了
13.运行工程会有警告(但是不影响运行程序)
objc[9295]: Class SdkConfig is implemented in both /var/containers/Bundle/Application/3E981382-8E7C-441F-822F-4FD550D12A38/C.app/C (0x104c255f0) and /var/containers/Bundle/Application/3E981382-8E7C-441F-822F-4FD550D12A38/C.app/FrameWork.framework/FrameWork (0x10ba595a0). One of the two will be used. Which one is undefined.
14.然后查到 objc runtime 对所用app使用同一个命名空间。原文链接 https://blog.csdn.net/pcliuguangtao/article/details/9119599
15.这篇博客(http://www.sohu.com/a/162004620_505825)中说到 ,framework可创建为bundle类型,然后用资源加载的方式加载。
16.新旧工程各创建为bundle类型的framework
17.再新建一个工程,将两个framework有选择的加载。没有警告 也没有崩溃了。
18 (20180528补充)这个bundle也可以通过网络下载获得
