工作需要把整個app包成一個SDK讓另一個app引用,所以要把原本專案的套件也包進去,不然在打包framework的時候,import套件那一行會報錯.

iOS如何把專案打包framwork後也讓原本的pod/套件包入framework ?

工作需要把整個app包成一個SDK讓另一個app引用,所以要把原本專案的套件也包進去,不然在打包framework的時候,import套件那一行會報錯.

假設你的專案叫”B”,打包的framework取名為BPack,那麽在Podfile的部分要加入framework自己的套件引用,原本的專案裝什麼pod,framework如果有用到該套件也要跟著裝,以SnapKit為例,作法如下:

target ‘B’ do

Comment the next line if you don’t want to use dynamic frameworks

use_frameworks! pod ‘SnapKit’, ‘~> 5.6.0’

Pods for B

end

target ‘BPack’ do

Comment the next line if you don’t want to use dynamic frameworks

use_frameworks! pod ‘SnapKit’, ‘~> 5.6.0’

Pods for B

Pods for BPack

end另外,在Build Setting的部分好像也要做一下設定: 如果你包的是動態庫,那麽在framework target的Build Settings: Linking -> Mach-O Type應該要選擇:Dynamic Libray

Mach-O這部分不太確定有沒有影響,不過我這樣選是可以Run App Successful. 有錯麻煩請指正,感謝!

關於Mach-O, 問GPT的解答是:

在Xcode中,Mach-O(Mach Object)是一种可执行文件格式,用于表示 macOS 和 iOS 应用程序的可执行文件、库和框架等。当你设置Xcode项目的” Mach-O Type”时,你实际上是在指定项目的输出文件的Mach-O类型。这个选项会影响你的应用程序或库在编译和链接过程中的最终输出格式。

以下是常见的Mach-O类型和它们的含义:

  • Executable (可执行文件): 选择这个类型将创建一个独立的可执行文件,用于运行你的应用程序。这是最常见的Mach-O类型,适用于大多数应用程序。
  • Static Library (静态库): 选择这个类型将创建一个静态库,它包含了一组编译后的代码和符号,可以被其他应用程序或库链接到它们的可执行文件中。静态库在编译时被静态链接到目标程序中,因此目标程序不需要在运行时依赖于外部库。
  • Dynamic Library (动态库): 选择这个类型将创建一个动态库,也被称为共享库。动态库是一组可重用的代码和符号,可以在运行时被多个可执行文件共享。这减小了可执行文件的大小,但需要确保目标系统上有正确版本的动态库。
  • Bundle (捆绑包): 这个选项用于创建捆绑包,它是一个包含资源文件和可执行代码的文件夹。捆绑包通常用于插件、扩展或特定类型的应用程序,如macOS应用程序的应用扩展。
  • Framework (框架): 这个选项用于创建一个包含代码和资源的动态库,通常用于共享代码和资源供多个应用程序使用。框架是一种特殊类型的动态库。

选择适当的Mach-O类型取决于你的项目类型和需求。通常,大多数iOS和macOS应用程序将使用”Executable”类型,而共享代码的项目可能会使用”Static Library”或”Framework”类型,具体取决于你的设计和部署需求。