iOS使用workspace开发framework 结合 Cocoapod管理

3,471 阅读2分钟

#工程创建 1、首先创建一个文件夹,例如TestDemo

image.png

2、使用xcode创建workspace并放入TestDemo文件夹内,如图 选择File → new→Workspace →编辑 → 点击save

image.png

3、在TestDemo文件夹中分别创建TestDemo App和 ShowText Framework, 如图

image.png

4、打开workspace,分别添加app和framework,可以拖动.xcodeproj,也可以点击加号或者右键Add Files to “TestDemo“,添加后如图

image.png

5、新建Podfile文件,变编写


platform :ios, '13.0'
workspace 'TestDemo.xcworkspace'              #指定workspace
inhibit_all_warnings!        #忽略警告
use_frameworks!

def commpod #宏定义几个target都要用的的pod
  pod 'SVProgressHUD'
end


target 'TestDemo' do

  project 'TestDemo'
  commpod
  pod 'Alamofire'

end

target 'ShowText' do
  project 'ShowText/ShowText.xcodeproj'
  commpod
  pod 'Alamofire'

end

6、pod install,完成后和第四步的图一样

7、将framework添加到主工程

image.png

#framework设置

1、设置Build Active Architecture Only 值 为NO

image.png 2、搜索Mach,设置为Dynamic Library

image.png

3、搜索Dead Code Stripping 设置为NO

image.png 4、去除模拟器中arm64 搜索Excluded Architectures 下Any ios Simulator SDK 值为 arm64。模拟器生成的.framework 不需要arm64

image.png

5、Build Libraries for Distribution 设置为Yes (如果是swift语言的时候需要)

image.png

至此应该就完成了大部分内容了

#遇到的问题

1、pod 失败报错,我用的是xcode 14.2,报错

force_encoding': can't modify frozen String (FrozenError)

解决如图

image.png

2、新建的动态库中使用asset管理图片,读取的方式有所改变

public class ImageProvider {

    // convenient for specific image

    public static func picture() -> UIImage {

        return UIImage(named: "test", in: Bundle(for: self), with: **nil**) ?? UIImage()

    }

  


    // for any image located in bundle where this class has built

    public static func image(named: String) -> UIImage? {

        return UIImage(named: named, in: Bundle(for: self), with: nil)

    }

}

3、国际化,和普通差不多,只是在framework需要注意应该使用有bundle参数,和图片读取一样 注意主app也需要做国际化才会有效果哦

public class LocalizedProvider {

    public static func localizedString(key: String) -> String {

        return NSLocalizedString(key,

                                 bundle: Bundle(for: self), comment: "")

    }

}

打包好的framework直接添加到主工程使用就行,如果有pod依赖库,只需要在主工程pod相应的库就可以了

#参考文章

iOS开发 使用Pods管理调试个人Framework

iOS使用workspace开发framework以及集成cocoapod方法