iOS SDK封装Framework带资源文件封装(一)

简介: iOS SDK封装Framework带资源文件封装

前言


制作SDK封装Framework带资源文件封装


一、新建主项目


主项目的ProjectName是HelloFramework( SDK的主项目 )


二、创建Framework


在主项目里创建Framework,暂时命名MyFramework

Project - > Editor - > Add Larget - > Cocoa Touch Framework

1.png


三、配置Framework信息


1、Architectures 配置支持的指令集


Project - > Target - > MyFramework - > Build Settings

Architectures配置支持的指令集,增加arm64e、armv7s


如下:

1.png

备注:系统已经默认配置了 arm64、armv7

指令集 支持设备设备
armv6 iPhone、iPhone 3G、iPod 1G、iPod 2G
armv7 iPhone 3GS、iPhone 4、iPod 3G、iPod 4G、iPod 5G、iPad、iPad 2、iPad 3、iPad Mini
armv7s iPhone 5、iPhone 5C、iPad 4
arm64 iPhone 5s、iPhone 6、iPhone 6P、 iPhone 6s、 iPhone 6sP、 iPhone 7、iPhone 7P、iPad Air、Retina iPad Mini
arm64e iPhone XR、iPhone XS Max


2、Build Active Architecture Only修改为NO,否则生成的静态库就只支持当前选择设备的架构。


Build Active Architecture Only 修改为 NO


3、Mach-O Type 选择是Static Library(静态库)还是Dynamic Library(动态库默认)


Mach-O Type 设置为 Static Library(静态库)


备注:使用动态库要注意需要在 Linked Frameworks and Libraries 和 Embedded Binaries 都加入对应的动态库。


如下:

1.png


4、设置Headers Phase


步骤:Target - > MyFramework - > Build Phases - > Headers


Public:需要暴露出来的 h 文件

Private:不想公开的 h 文件

Project:显示你MyFramework里面的所有你创建的 h 文件

1.png


5、设置最低兼容版本


如下:

1.png


6、新建一个FrameworkManager文件


在FrameworkManager类里实现了一个方法

//.h文件声明
#import <Foundation/Foundation.h>
@interface MyFrameworkManager : NSObject
+ (UIViewController*)creatFrameworkFileViewController;
@end
//.m文件实现
#import "MyFrameworkManager.h"
#import "FrameworkFileViewController.h"
@implementation MyFrameworkManager
+ (UIViewController*)creatFrameworkFileViewController{
    FrameworkFileViewController *vc = [[FrameworkFileViewController alloc] initWithNibName:GetNibName(@"FrameworkFileViewController") bundle:[NSBundle mainBundle]];
    NSLog(@"subviews:%@",vc.view.subviews);
    return vc;
}
@end


7、引入头文件


默认生成的.h文件中,我的是MyFramework.h,把所有需要暴露的.h文件都用#import 引入,记住一定要将所有需要暴露的.h文件都引入,也就是上面Headers-Public中加的所有.h文件,不然编译后生成的.framework在引用的时候会有警告。 如下:

1.png

8、回到主项目,引用MyFrameworkManager


/// 引入头文件
#import <MyFramework/MyFramework.h>
// 主项目当中
UIViewController *vc = [MyFrameworkManager creatFrameworkFileViewController];


9、生成Framework包


打包Framework:分为真机和模拟器,这两个生成的framework是不一样的。(如果说你需要生成一个既可以真机使用又可以模拟器使用的,那就分别生成,最后在合并在一起)。按照下图将编译的 Device 选择为真机 ,然后按下 Command + B 开始编译,编译成功后右键 Products 文件夹下的 .framework 文件,点击 Show in Finder。


四、xib文件和图片的存放和引用


友情提示:资源文件都放在Bundle文件当中,如果放在Framework文件当中,后面打包上传的时候会出现Found an unexpected Mach-O header code: 0x72613c21


创建bundle,放置资源文件(nib文件,图片)


1、新建一个bundle文件,这里暂时命名为KJFramework.bundle


如下:

1.png


2、显示包内容,将图片等资源放入bundle文件当中


如下:

1.png


第一种编译成nib文件


1、将xib文件编译成nib文件

1.png

打开终端:cd 需要转换的xib目录

输入编译:ibtool --errors --warnings --output-format human-readable-text --compile ibtool --errors --warnings --output-format human-readable-text --compile FrameworkFileViewController.nib FrameworkFileViewController.xib


编译完成会生成如下文件:

1.png


第二种生成nib文件


1、编译文件,Command + B 生成Framework文件

1.png


2、Show in Finder Framework文件,从中找到一个FrameworkFileViewController.nib文件


备注:一旦xib文件发生变化,就需要重新编译nib文件,然后替换


3、读取bundle资源包中的图片


把Bundle文件导入到我们的framework中,我们用到图片的时候,就取Bundle中的图片来用。

//FrameworkFileViewController.m文件实现
#import "FrameworkFileViewController.h"
@interface FrameworkFileViewController ()
@property (unsafe_unretained, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation FrameworkFileViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    self.imageView.image = [UIImage imageNamed:GetBundleImage(@"tiaotiaosu")];
}
- (IBAction)changeImage:(UIButton *)sender {
    if (_imageView.highlighted) {
        self.imageView.image = [UIImage imageNamed:GetBundleImage(@"jienigui")];
    }else{
        self.imageView.highlightedImage = [UIImage imageNamed:GetBundleImage(@"kabisou")];
    }
    self.imageView.highlighted = !self.imageView.highlighted;
}
- (IBAction)dismiss:(UIButton *)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}
@end



相关文章
|
7月前
|
开发工具 iOS开发 计算机视觉
|
6月前
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
|
7月前
|
SQL 分布式计算 大数据
MaxCompute产品使用合集之如何使用SDK获取ODPS上的资源文件
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
6月前
|
开发工具 图形学 iOS开发
Unity与IOS⭐Unity接入IOS SDK的流程图
Unity与IOS⭐Unity接入IOS SDK的流程图
|
7月前
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
iOS Objective-C 应用连接Azure Storage时,若不关闭账号的匿名访问,程序能正常运行。但关闭匿名访问后,上传到容器时会出现错误:“Public access is not permitted”。解决方法是将创建容器时的公共访问类型从`AZSContainerPublicAccessTypeContainer`改为`AZSContainerPublicAccessTypeOff`,以确保通过授权请求访问。
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
|
15天前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
117 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
6月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
165 0
|
3月前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
143 1
|
4月前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
91 7
|
6月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
240 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 2
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 3
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 5
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 6
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 7
    【01】完整开发即构美颜sdk的uni官方uts插件—让所有开发者可以直接使用即构美颜sdk的能力-优雅草卓伊凡
  • 8
    iOS8 中无需开源库的内置功能一览
  • 9
    iOS7应用开发7:自定义视图、手势操作
  • 10
    IOS小工具以及精彩的博客