iOS APP Framework化

iOS APP Framework化,第1张

iOS APP Framework化

目标:iOSAPP Framework化。

方法:资源文件打包成bundle,其它逻辑实现封装成framework静态框架。

准备:

一个基本功能的APP

1,将资源文件打包生成bundle

目标文件:图片等资源文件以及画面XIB

建立工程:File-> New ->Project -> macOS ->Framework &Library ->Bundle

拷贝导入资源文件:

修改项目TARGETS的BaseSDK为iOS:

至此工程已经建立完毕,编译工程生成.bundle文件

右键单击.bundle->show in finder便可找到生成的bundle

2,逻辑实现封装成静态框架

目标文件:.m .h文件

建立工程:File-> New ->Project -> iOS ->Framework &Library -> Cocoa Touch Framework

拷贝导入资源文件:

添加BundleTools,用来获取我们生成的.bundle里的资源文件

BundleTools.h

BundleTools.m

修改我们导入的.m文件,添加init和initWithNibName方法使其初始化时候获取bundle里面的资源。

至此工程已经建立完毕,编译工程生成.framework文件

右键单击.framework->show in finder便可找到生成的framework

3,建立测试工程

复制导入framework与bundle

工程TARGETS ->Embedded Binaries -> 添加framework

建立测试画面,使用framework功能

至此OS APP Framework化完毕,运行实现效果。

iOS 创建Framework : https://www.jianshu.com/p/9a1a3f5be434

iOS framework动态库的创建和使用 : https://www.jianshu.com/p/4301a6f3e426

iOS framework动态库的创建和使用

love_p 关注

0.112021.02.25 18:27:38字数 1,032阅读 880

软件:xcode12

FrameWork既可能是动态库,也可能是静态库,我们这里创建的是动态库。

选择FrameWork。默认创建的是Framework动态库

设置动态库名称

修改项目的iOS Deployment Target为10.0(与使用动态库项目保持一致,或者低于使用的项目)

MyFramework.h是默认生成的,会自动添加到暴露的header中,可以在内部import一些自己需要暴露使用的头文件。

创建文件,并添加想要暴露的头文件

(可选)设置动态库支持bitcode,如果不支持bitcode,使用动态库的项目就不能支持bitcode

动态库支持bitcode: https://www.jianshu.com/p/c5570751fdbc

第一步,DEPLOYMENT_POSTPROCESSING = YES

第二步,设置 STRIP_STYLE 为 Debugging Symbols(默认是)

第三步,Build Settings ->Compiler Flags添加 -fembed-bitcode 参数

第四步,确认Build Settings ->Enable Bitcode 为YES(默认是)

设置Edit Scheme的Run的build Configuration为Release,以便于打出来的framework是release的。当然你也可以使用debug的进行调试。

simulator和真机的framework包如果需要进行合成一个调试包,需要去掉模拟器的arm64,因为xcode12合成的时候,会因为simulator和真机的包都包含arm64的而产生冲突。

选择任何simulator进行build,生成simulator的包,使用Any iOS Device进行build,生成真机的包。

生成之后在项目目录的products下的Myframework.framework进行Show in Finder,就可以看到生成的framework包。我们可以把两个包拷贝出来然后

两个包都可以单独进行调试,但是真机的包需要使用本地的证书进行重签名。

将两个包的可执行文件进行合成:

1>cd到你合成文件想要放置的文件夹下(避免当前文件夹下有和可执行文件名称相同的文件或者文件夹,有的话会报错)

2>终端执行命令:lipo -create sumulator的framework的可执行文件的目录 真机的framework的可执行文件的目录 -output 可执行文件名

lipo -create /Users/admin/Desktop/work/dylib/Release-iphonesimulator/MyFramework.framework/MyFramework /Users/admin/Desktop/work/dylib/Release-iphoneos/MyFramework.framework/MyFramework -output MyFramework

3>将生成的可执行文件替换Release-iphoneos中的MyFramework.framework下的可执行文件。MyFramework.framework则就是合成的包。

4>对合成的包进行开发者证书(使用动态库项目的开发者证书)签名,签名之后就生成了可进行sumulator和真机调试的framework动态包。

签名方式:重新打开终端输入/usr/bin/security find-identity -v -p codesigning 列出电脑上可用的签名,cd到XX.framework所在的目录,然后codesign -fs "Apple Development: xxxx (XXXX)" xx.framework进行签名。

注意:打包测试或者发布的时候是直接使用没有签名过的真机的framework,xcode会自动进行签名。

项目使用动态库framework

把动态库添加到项目,然后在Build Phases的Copy Bundle Resources中添加动态库,这样动态库在打包的时候可以打包到bundle中。Link Binary Libraries如果添加了的话,动态库在程序运行的时候就会自动动态加载,可以直接使用,如果没有添加,则需要我们使用loadAndReturnError或者dlopen(私有api不能上线使用)进行加载,加载成功之后进行使用。

动态加载库方式:

1> Build Phases的Copy Bundle Resources中添加动态库,Link Binary Libraries删掉动态库。如果Link Binary Libraries需要链接的话需要在Build Settings->Links->Runpath Search Paths中添加@executable_path/

2>使用

如果重复添加动态库,则后面添加的动态库失效。

如果framework中使用到了Category那么在使用framework的工程中要设置Build Settings中的Other Link Flag为-ObjC或者-all_load


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11424754.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存