zoukankan      html  css  js  c++  java
  • iOS

    最近公司要求将几个第三方的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
  • 相关阅读:
    spring websocket自动断开连接再创建引发的问题解决方案
    解决html5 audio iphone,ipd,safari不能自动播放问题
    spring 4.1.4 发布
    wince程序调用另外一个wince exe程序?
    3种LVS/Nginx/HAProxy负载均衡器的对比分析
    Weblogic12C 集群实现session同步
    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 解决
    Spring Framework 4.1.3 还是一样给力
    RabbitMQ与Redis队列对比
    java.util.Vector排序
  • 原文地址:https://www.cnblogs.com/qiyiyifan/p/11064592.html
Copyright © 2011-2022 走看看