Xcode9在原iOS工程里打包framework

本文链接:https://www.jianshu.com/p/2d5ca206dccb

原来的工程有一部分代码想打包成framework不让客户看到,但是有各种分支,不好重建工程,所以想在原工程里面直接打包。本来想做混淆,但是没做成功,发现不需要混淆,因为打包后看不到代码的,这跟Android的jar包不一样。

参考这篇文章

iOS Xcode9 封装生成.framework - 简书
https://www.jianshu.com/p/5ef5e21d887c

⚠️后面的内容是新手所写,慎入!

这是我的工程:

obarong/TestFramework: iOS,Xcode9在原工程里打包framework
https://github.com/obarong/TestFramework

1 测试打包framework

创建TestFramework工程

新建iOS工程

创建FrameworkProject工程并添加进TestFramework工程

新建Framework工程
工程名
添加到原工程
目录结构

新建Hello.m和Hello.h

新建m文件

更改Xcode项目配置

更改Xcode项目配置

增加armv7s

增加armv7s

设置Headers

设置Headers

公开头文件

公开头文件

编译FrameworkProject

编译framework

添加FrameworkProject.framework到原工程,把文件拖进去就好了,记得选上copy。

copy

编译运行app

编译运行app

build成功。

成功

2 封装原工程的代码

打包的方法可以了,然后看怎么分离原来的代码。 这部分我直接拿公司项目开刀,demo没有,需要自己脑补。

把代码拖进framework工程。在FrameworkProject的设置,Build Phases->Compile Sources->点“+”把刚拖进去的代码添加进工程。

编译FrameworkProject。替换新的framework文件。

想在原工程引用包里的方法,只要添加头文件

#import <FrameworkProject/NSObject+Hello.h>

正文END

附上一些报错

  • 编译报错:
Showing Recent Messages
/Users/xxx/code/xcode/TestFramework/FrameworkProject/FrameworkProject/Hello.m:10:9: 'Hello.h' file not found with <angled> include; use "quotes" instead

解:把头文件<> 改成""。

  • 报错:
Showing Recent Messages
/Users/xxx/code/xcode/TestFramework/FrameworkProject/FrameworkProject/Hello.h:12:1: Missing context for method declaration

Showing Recent Messages
/Users/xxx/code/xcode/TestFramework/FrameworkProject/FrameworkProject/Hello.m:12:1: Expected method body

解:重新创建Hello类,选category。

  • 问 :一个workspace放两个project有点问题,先从一个framework工程开始吧。单独的工程一下就编译出了framework。拖到新的工程,找不到头文件。
    解:拖入文件的时候选上Copy items if needed。

  • 问:
    为了真机调试,按照教程合并了两个文件,

$ lipo -create /Users/xxx/Library/Developer/Xcode/DerivedData/FrameworkTest-boysvzdxnnueeqeqvwlqvevycxmy/Build/Products/Debug-iphoneos/FrameworkTest.framework/FrameworkTest /Users/xxx/Library/Developer/Xcode/DerivedData/FrameworkTest-boysvzdxnnueeqeqvwlqvevycxmy/Build/Products/Debug-iphonesimulator/FrameworkTest.framework/FrameworkTest -output ~/Desktop/new/FrameworkTest 

但是编译不通过,报错

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_Hello", referenced from:
      objc-class-ref in ViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

解:设置armv7s。修复代码Hello类的错误。

折腾了半天,原来之前的工程可以用,只要修改代码的错误,还有把framework文件拖到原工程就可以了。

不能用+方法调用-方法。会提示找不到。


  • 问:怎么Xcode一个workspace多个project?为什么要多个project?
    答:因为不想分两个仓库。

  • 报错:

Undefined symbols for architecture arm64:
  "_OBJC_METACLASS_$_AModule", referenced from:
      _OBJC_METACLASS_$_BModule in BModule.o
      ...

解:framework工程的Build Phases的Compile Sources选项添加工程的m文件。

  • 报错
ld: 2 duplicate symbols for architecture arm64

解:删除原工程文件的引用。

  • 问:打包的工程在其他地方打开编不过。估计是工程设置问题。
    解:有解决办法了,同一个git仓库,但不同工程,在Xcode分开打开、分开编译就好了。
  • 错误:master分支合并到branch2后编译失败
clang: error: no such file or directory: '/Users/xxx/code/xcode/Demo/Demo/sync_framework/data/SyncLongData.m'
clang: error: no input files

解:工程的设置文件没有合并,要手动删除文件。

  • 报错:升级Xcode10后master分支也编不了
error: Multiple commands produce '/Users/xxx/Library/Developer/Xcode/DerivedData/Demo-csqebbfrltqlntcmhtnshtcpktql/Build/Products/Debug-iphoneos/Demo.app/Info.plist':
1) Target 'Demo' (project 'Demo') has copy command from '/Users/xxx/code/xcode/Demo/Demo/ui/Masonry/Info.plist' to '/Users/xxx/Library/Developer/Xcode/DerivedData/Demo-csqebbfrltqlntcmhtnshtcpktql/Build/Products/Debug-iphoneos/Demo.app/Info.plist'
2) Target 'Demo' (project 'Demo') has process command with output '/Users/xxx/Library/Developer/Xcode/DerivedData/Demo-csqebbfrltqlntcmhtnshtcpktql/Build/Products/Debug-iphoneos/Demo.app/Info.plist'

解决方案:根据提示信息,选中对应的target-> Build Phases -> Copy Bundle Resource -> 移除Info.plist

  • 报错
ld: library not found for -lstdc++.6

解:删除引用libstdc++.6.tbd。

  • 打包出来的工程会报错
ld: framework not found DemoFW

解:.gitattributes把DemoFW忽略打包了,找不到DemoFW,修改为允许打包再重新打包就可以了。

参考

Undefined symbols for architecture arm64解决方案 - 岽少的专栏 - CSDN博客
https://blog.csdn.net/zuoyou1314/article/details/46638073

XCode 10 错误:Multiple commands produce - 简书
https://www.jianshu.com/p/544a13482030

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

推荐阅读更多精彩内容