最近公司要求將幾個第三方的SDK封裝成一個公司自己控制的SDK,以前沒怎么接觸過,所以查了一天資料,大概搞明白是怎么做的了,在這里做個記錄。
現在開始!
一、創建Framework文件:
1.Xcode -> File --> New --> Projict.. --> Framework & Libaary --> Cocoa Touch Feamework
2.創建一個類文件來調試

// // ShowAccountName.h // ShowNameSDK // // Created by SJQ on 2019/6/21. // Copyright © 2019 西門依北. All rights reserved. // #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @protocol ShowAccountNameDelegate <NSObject> //返回你的姓 - (void)isFinshWithYourFirstName:(NSString *)firstName; @end @interface ShowAccountName : NSObject @property (nonatomic, weak) id <ShowAccountNameDelegate> delegate; //傳入的名字 @property (nonatomic, copy) NSString *accountName; //打印你的名字 - (void)showNameWithAccount; @end NS_ASSUME_NONNULL_END
// // ShowAccountName.m // ShowNameSDK // // Created by SJQ on 2019/6/21. // Copyright © 2019 西門依北. All rights reserved. // #import "ShowAccountName.h" @interface ShowAccountName() @property (nonatomic, copy) NSString *firstName; @end @implementation ShowAccountName - (void)showNameWithAccount { NSLog(@"你的名字:%@",self.accountName); } - (void)setAccountName:(NSString *)accountName { _accountName = accountName; if (self.accountName.length == 0) { self.firstName = @"未檢測到姓名"; } else { self.firstName = [self.accountName substringToIndex:2]; } //觸發代理 if ([self.delegate respondsToSelector:@selector(isFinshWithYourFirstName:)]) { [self.delegate isFinshWithYourFirstName:self.firstName]; } } @end
3.配置屬性
- TAGETS -> Build Settings -> Dead Code Stripping 設置為 NO;
- TAGETS -> Build Settings -> Link With Standard Libraries 設置為 NO;
- TAGETS -> Build Settings -> Mach-O Type 設置為 Static Library;
- 增加armv7,armv7s, TAGETS -> Build Settings -> Architectures -> Architectures 增加 armv7,armv7s
- 設置Headers TAGETS -> Build Phases -> Headers -> Public 把要暴露的.h文件拖到這個目錄下
以下是圖片示例:



4.需要在ShowNameSDK.h文件里面添加所創建使用到的 文件頭
#import <ShowNameSDK/ShowAccountName.h>

二、調試完成的Framework功能
就在剛剛新建的Framework項目里面新建調試Demo,


然后切換TARGETS里面的項目就好了,調試的時候在 General -> Linked Frameworks and Libraries 下添加 你新建的Feamework文件進行調試。
三、生成完整的Framework 文件
1.選中模擬器,運行程序
2.選中真機,運行程序
3.在Finder中找到 Framework 文件

編譯程序會分別編譯成兩個版本,真機和模擬器,我們要做的就是要把這兩個版本合成一個通用的版本,要把framework文件下的 ShowNameSDK合成一個

打開終端:
lipo -create 路徑1 路徑2 -output 新文件路徑
路徑1 路徑2 為上面兩個framework文件下的 ShowNameSDK文件路徑,新文件路徑我是放到桌面上的

然后把生成好的ShowNameSDK文件(注意名字要一樣)去替換兩個Framework中的一個目錄下的ShowNameSDK文件,然后拷貝這個.framework文件,這個.framework就是我們最終要的!
四、打包
打包會出現bug ,我檢查了代碼發現是生成.framework文件的時候有些配置配錯了,下次再遇到再記錄
參考資料:
https://www.cnblogs.com/oc-bowen/p/7478461.html
