iOS工程中如何将新版本的代码和旧版本代码合到一起打包来实现后台控制运行哪一套代码(新旧工程类名99%都一样)

1.在原工程新建一个target为framework类型。

2.由于Appdelegate不能同名,要新创建一个FAppdelegate。

3.pch文件也要新建,并且不能交叉引用原来的Appdelegate,pch

4.新的target中添加Compile Sources 注意要添加的是FAppdelegate,不能引用原来的Appdelegate

还有原来的arc mrc混编的要加-fno-objc-arc

iOS工程中如何将新版本的代码和旧版本代码合到一起打包来实现后台控制运行哪一套代码(新旧工程类名99%都一样)_第1张图片



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
libresolv

7.添加资源文件类型:

png
.xcassets


.xib

.bundle

.jpg

.json

.plist

.storyboard

.html

.txt

.db

.wav


8.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)/Libs

9.编译报错:原来是DT第三库引用的时候左边双引号右边尖括号

iOS工程中如何将新版本的代码和旧版本代码合到一起打包来实现后台控制运行哪一套代码(新旧工程类名99%都一样)_第2张图片


10.关闭bitcode

11.将生成的framework导回原工程,调用方法

iOS工程中如何将新版本的代码和旧版本代码合到一起打包来实现后台控制运行哪一套代码(新旧工程类名99%都一样)_第3张图片

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有选择的加载。没有警告 也没有崩溃了。

iOS工程中如何将新版本的代码和旧版本代码合到一起打包来实现后台控制运行哪一套代码(新旧工程类名99%都一样)_第4张图片



18 (20180528补充)这个bundle也可以通过网络下载获得


你可能感兴趣的:(ios)