xcode 如何把新建的.framework 打包成一个文件提供其他人调用

passself 2024-08-08 23:20:24

目前是新建了一个.framework的 staticlib,生成之后,build之后生成xx.framework文件夹,把文件夹直接拷贝过去给其他人用可以 。
但是如何打包成 一个文件提供给其他人调用呢? 或者说一般情况下.framework这样的库都是怎样的形态提供的

...全文
有偿回答
拼手气红包 10.00元
1732 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
AI向善 09-08 11:51
  • 打赏
  • 举报
回复

你说的"打包成一个文件给别人调用",先分清两种形态,别混在一起。我之前给别的团队传过静态库,头一回也直接发了个压缩包,结果对方真机模拟器来回报错,折腾半天,后来换成 xcframework 就好了。

先说交付物本身。.framework 在磁盘上就是文件夹,里面是二进制加 Headers、Info.plist 这些。要"一个文件",常规做法不是把文件夹硬压成单个文件,而是打包成 .xcframework,这是苹果现在推荐的静态库交付格式,一个 .xcframework 里能同时装真机 arm64 和模拟器 x86_64/arm64 两套切片,别人拖进 Xcode 会自动选,不会出现真机编译报错或模拟器跑不了的问题。

第二种是你自己传输时图省事,把 .framework 文件夹 zip 成一个压缩包发过去,对方解压后再拖进工程。这条路也能用,但只适合内部小范围传文件,不是规范做法,别人拿到还得自己注意解压层级。

给你几个具体做法:

  1. 如果对方只跑真机,你本地 build 出来的 Debug-iphoneos 或 Release-iphoneos 下的 .framework 直接能用,注意别把模拟器版发过去。

  2. 真机和模拟器都要支持,用 Xcode 12 以上的 Build Phase 跑两遍 lipo,或者直接在终端合成:
    lipo -create -output 合并后的二进制 真机路径/xx.framework/xx 模拟器路径/xx.framework/xx
    然后把合并后的二进制替换回 .framework 里。手动做容易漏,建议直接用 xcodebuild archive 分别归档再合成。

  3. 省心的做法:Xcode 里建好 framework target 后,用 Archive 或者脚本生成 .xcframework:
    xcodebuild -create-xcframework -framework 真机路径/xx.framework -framework 模拟器路径/xx.framework -output xx.xcframework
    生成的 xx.xcframework 拖给对方,在 General 的 Frameworks, Libraries, and Embedded Content 里加进去就行,代码里照常 import。我日常给合作方发库都用这一条,没出过架构不匹配的问题。

  4. 对方如果报"framework not found"或运行时 dyld 找不到库,多半是你把静态 framework 当动态用了,或者对方没把动态 framework 加到 Embed 里。静态库编译期就链进去了,动态库必须 Embed & Sign,这一点经常踩。

顺带提醒:如果依赖了系统框架或第三方库,交付时要把依赖说清楚,或者直接用 CocoaPods/SwiftPM 包管理分发,省去手动拖库的沟通成本。你自己用哪种方式集成的,遇到的具体报错是什么,可以贴出来我帮你看。

29,038

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧