framework操作及制作podfile引入

IOS 逆向开发(四)App重签名
XCFramework制作
如何辨别.framework是动态库还是静态库
lipo 命令的基本用法
一个工程多个target引入CocoaPods的方式
美团 iOS 工程 zsource 命令背后的那些事儿
iOS美团同款"ZSource"二进制调试实现
https://github.com/MeetYouDevs/cocoapods-imy-bin
cocoapods-binary工作原理及改进
Ruby和Cocoapods文章合集
iOS Pod 'xxx.h' file not found with <angled> include; use "quotes" instead
由 Pod 导致的 File not found
Cocoapods整理(三)——编写podspec文件

完整demo:https://github.com/eye1234456/podframwork.git

1、查看签名及重签名:

查看app的签名:
codesign -vv -d xxx.app
查看 某个库的签名(同时可以查看某个库支持的架构):
codesign -vv -d xxx.framework
查看电脑安装好的所有证书:
security find-identity -v -p codesigning
对某个库进行重签名:
codesign -fs "Apple Development: xxx (xxx)" xxx.framework

2、查看是动态库还是静态库:

file xxx.framework/xxx

3、查看支持的架构:

查看支持的架构:
lipo -info xxx.framework/xxx
删除指定的架构(如x86_64,导出后的库会自动删除签名信息):

lipo -remove x86_64 \ 
xxx.framework/xxx \ 
-output xxx.framework/xxx

合并几个架构(比如把模拟器的x86_64与真机的arm64合并成一个,可以一个framework同时支持真机和模拟器,导出后的库会自动删除签名信息,但是会增加包的体积)

lipo -create  xxx.framework/xxx  \ 
yyy.framework/yyy \ 
-output zzz.framework/zzz

4、将多个framework库合并成xcframework:

xcode可以会在编译时选择xcframework中实际需要的架构编译进包中,这种方式可以减少包的体积还能一个xcframework同时支持真机与模拟器运行

xcodebuild -create-xcframework \
-framework xxx.framework \
-framework yyy.framework \
-output zzz.xcframework

二、xcode创建framework及制作framework的pod私有库:

动态framework由于必须要签名,如果framework与主app的签名不一致会导致报签名错误,所以尽量使用pod的方式引入就不会有签名问题

1、在xcode创建framwork的工程
2、然后再创建Podfile将framwork的源码使用pod的方式依赖三方库
2.1 如果podfile里use_frameworks!是打开的,

则编译后创建的framwork依赖的三方使用的是动态库的方式,也就是说依赖的三方库不会被打包到framework里,需要在后续编写podspec文件时增加s.dependency 'AFNetworking'这种内容,如果不加入这种依赖,则会在运行时报找不到某些依赖库的错

2.2 如果podfile里use_frameworks!是注释掉的或者没有这一句,

则编译后创建的framwork依赖的三方使用的是静态库的方式,也就是说依赖的三方库会被直接打包到framework里,如果主app也依赖了相同的一些三方库,可能会有一些莫名其妙的错

3、创建xxx.podspec注意事项
1、这个文件必须在git仓库下的第一级目录
2、xxx.podspec的名字需要跟文件里的s.name = 'xxx'一致,这个名字也是在主app里pod 'xxx‘的名字
3、指定的framwork的方式

s.vendored_frameworks = [
 'xxx.framework',
 'yyy.xcframework'
]

4、指定依赖的三方库:

s.dependency 'AFNetworking', 
s.dependency 'ReactiveObjC'

三、framwork源码调试


四、多target的podfile的配法:

方式一:通过 abstract 方式引入

#targetA: [AFNetworking,Masonry]
#targetB:[AFNetworking,SDWebImage]
abstract_target 'abstract_pod' do  #这里的abstract_pod在实际targets中不存在,是虚拟
    pod 'AFNetworking'

    target 'targetA' do
        pod 'Masonry'
    end

    target 'targetB' do
        pod 'SDWebImage'
    end
end

方式二:循环 target 添加 pod

#多个target的pod引入,方式一:如每个pod都引入masonry
targetArray = ['target1','target2']
targetArray.each do |t|
    target t do
        pod 'Masonry', '~> 1.1.0'
    end
end

方式三:提取公共 pods 各个 target 引入

#多个target的pod引入,方式二:如每个pod都引入masonry
def commonPods
    pod 'Masonry', '~> 1.1.0'
end

#工程一:
target 'AnyDoorDemo' do
    commonPods
    pod 'AFNetworking', '~> 3.2.1'
target 'AnyDoorDemoTests' do
    inherit! :search_paths
    pod 'Specta', '~> 1.0.7'
    pod 'OCMock', '~> 3.4.2'
    pod 'Expecta', '~> 1.0.6'
end

  target 'AnyDoorDemoUITests' do
    inherit! :search_paths
    # Pods for testing
  end
end

#工程二:
target 'HostApp' do
    commonPods
end

iOS Pod 'xxx.h' file not found with include; use "quotes" instead
好好的<>非要让你改成"",不然就报错给你看 T T
分析:

Header Search Paths中未配置对应路径。可能是.podspec文件中的“dependencies”未配置对应的依赖,导致对应依赖库的路径没有写入编译项目的“Header Search Paths”内

解决方法:

方法一:
项目->PROJECT->项目xxx->Info->Configurations->Debug->项目xxx->targetXXX->Pods-xxx.debug
能改成这个最好,如果有自定义的config,在定义的config里引入Pods-xxx.debug

// 自定义的xxx-debug.xcconfig里
#include "Pods/Target Support Files/Pods-xxx/Pods-xxx.debug.xcconfig"

方法二:
修改 Header Search Path
添加 $(PODS_ROOT) 选择 recursive
添加 $(SRCROOT) 选择 recursive
Build

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容