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在原工程里打包framework1 测试打包framework 创建TestFramework工程
https://github.com/obarong/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
正文END 附上一些报错
- 编译报错:
Showing Recent Messages
/Users/xxx/code/xcode/TestFramework/FrameworkProject/FrameworkProject/Hello.m:10:9: 'Hello.h' file not found withinclude;
use "quotes" instead
解:把头文件<> 改成""。
- 报错:
Showing Recent Messages
/Users/xxx/code/xcode/TestFramework/FrameworkProject/FrameworkProject/Hello.h:12:1: Missing context for method declarationShowing 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
【Xcode9在原iOS工程里打包framework】XCode 10 错误:Multiple commands produce -
https://www.jianshu.com/p/544a13482030
推荐阅读
- 2020-04-07vue中Axios的封装和API接口的管理
- iOS中的Block
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础
- 接口|axios接口报错-参数类型错误解决
- iOS|iOS 笔记之_时间戳 + DES 加密
- iOS,打Framework静态库
- 常用git命令总结