iOS - building for iOS-arm64 but attempting to link with file built 报错问题的解决

开发中因为其很多的功能复杂且重复、又或者不希望比人看到自己写的代码保护知识产权等等,所以我们将这个功能封住起来供我们来调用,所以现在基本上每一个项目中都会用到各种各样的库,方便的同时也带来了一些麻烦,,,

一、关于 “库” 的介绍

  1. 我们平时在项目中用的最多的就是开源的第三方库,这种库是开源的,我们不仅能用,还能查看源代码甚至可以修改源代码。
    与开源库对应的就是闭源,闭源库分为动态库静态库动态库就是.dylib或者.framework结尾的文件。就是苹果官方提供给我们用的那些库。开发者不能在项目中使用自制的动态库,否则无法上传到APPStore。(文字复制,未做验证)所以,对于闭源库,我们主要讨论的是静态库。静态库的样子就是用户拿到的文件有很多头文件.h+资源包+编译过的一个二进制文件.a(.framework)。即没有公开的那些文件都被编译进了.a或.framework里面。如果是为了保护知识产权什么的可以用静态库。

  2. .a静态库需要结合.h文件和资源包给用户使用。而生成.framework的话里面已经包含.h和资源文件,可直接给用户使用。

  3. 如果库涉及图片等资源,可以用放在与.a或.framework同名的bundle文件中。新建文件,修改后缀为bundle即可。

  4. 静态库多次被使用就会多次被拷贝,产生冗余,但是没办法,我们不能使用自制的动态库(不重复拷贝)。

二、项目中引用静态库(. framework)报错

我在项目中引用了一个第三方的framework,当在模拟器编译的时候没有问题,但如果在真机的环境下就会报下图的错误,如图所示:

what fuck?? 生活又对我这个小白下了毒手??
经过一系列的整之后,发现 报错的这个 SDCalertView. framework 文件下有两个文件夹,如图:

首先不要被名字搞混淆,这两个分别对应的是 真机环境 和 模拟器环境下编译的文件。如图:

所以我解决的办法就是: 如果是需要真机运行,那么将项目中原来的SDCalertView. framework 删除,然后add file release 下的 SDCalertView. framework,反之也是一个道理。
然后每次重新 add 之后 记得修改 对应 framework 的 embed 如图:

然后 运行就正常了 success !!!(下面有一劳永逸的方法⬇️)

三、为什么这么修改就可以了?

可以看到 上面报警告的那张图,黄色部分有一句提示:building for iOS-arm64 but attempting to link with file built ,导致的意思是想在真机的arm64环境下编译,但是却链接到了 模拟器的X86_64架构的文件了。真的是这样吗?

查看了整个文件看到如下两张图:分别对应真机 和 模拟器


真机 对应的文件夹
模拟器 对应的文件夹

找到 那个白色 的 SDCAlertView


截屏2020-04-17 下午6.27.51.png

然后 输入 lipo -info SDCAlertView 的路径

可以看到 这个 文件是 x86_64 的 也就是对应的是 模拟器的版本

再看看 另一个:可以看到 对应的是 真机下的。

所以,这也就是我们每次都要切换文件夹的原因。。。。。有点傻。。

四、一劳永逸的办法

可不可以不需要我们自己去切换呢?
答案是有的。。。

我们可以将两个给合并起来,得到一个 x86_64 armv7 arm64 版本的。
操作如下:

lipo -create 真机路径 模拟器路径 -output 真机路径

这里的真机路径和 模拟器路径 对应的是 那个白色的 SDCAlertView 的路径


这样将 真机路径 的文件拖入工程中,就可以了。完美解决~.~

4月22日更新 打包出错

今天打包测试包报错:

参照了网上的做法解决了:https://www.jianshu.com/p/0145916f2139
所以绕了一大圈,还是不能一劳永逸的解决问题,每次切换模拟器和真机的时候就得切换 静态库包。。😂(不知道有没有哪位大神解决了这个问题,希望可以在下面评论区说出解决的方法,谢谢🙏)

各种架构解释:

模拟器32位处理器测试需要i386架构,(iphone5,iphone5s以下的模拟器)
模拟器64位处理器测试需要x86_64架构,(iphone6以上的模拟器)
真机32位处理器需要armv7,或者armv7s架构,(iphone4真机/armv7, ipnone5,iphone5s真机/armv7s)
真机64位处理器需要arm64架构,(iphone6,iphone6p以上的真机)

大致的问题解决思路就是这么多。欢迎补充和改正~~~💻
参考文档:
https://www.jianshu.com/p/840badb8a861
https://blog.csdn.net/weisubao/article/details/43270927
https://blog.csdn.net/u013531215/article/details/79359378

关于 库 的介绍:
https://www.jianshu.com/p/42891fb90304

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

推荐阅读更多精彩内容