xcode6制作framework(使用第三方依赖框架)

2023-05-16

这两天由于会用到framework所以研究了一下framework的制作,我用到了xcode6.1、AFNetworing。

转载请注明http://blog.csdn.net/mengxiangyue

废话不多说了,下面是步骤:

1 建立一个single view application工程,然后打开工程中的Main.storyboard,选中里面的唯一一个ViewController,点击菜单栏的Editor->embed in->navigation Controller(嵌入这个navigation controller只是为了测试需要,并不是必须的)。

2 点击工程,在targets项目点击左下角的加号,如下图(下图中的TTTTTTT是我已经添加的Framework):

然后会出现如下的图,选择Cocoa Touch Framework


选择next后,输入对应的framework的名字,到这里就创建好了这个framework的工程。

3 引入AFNetWorking,将AFNetWorking拖到项目中,会出现如下的图,选择好Finish导入成功。

4 创建Framework内的类

在创建的Framework上面点击右键,new File-->Coco Touch Class,创建一个Objective-C的类XYTestViewController,类的内容如下:(这个类只是简单的演示,里面引用了AFnetworking)

#import <UIKit/UIKit.h>
#import "AFNetworking.h"

@interface XYTestViewController : UIViewController

@end
.m文件

#import "XYTestViewController.h"

@interface XYTestViewController ()

@end

@implementation XYTestViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"进入框架内博");
    self.view.backgroundColor = [UIColor whiteColor];
    
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 200, 60)];
    [button setTitle:@"点击" forState:UIControlStateNormal];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    
}

- (void)click:(UIButton*)sender {
    NSLog(@"点击");
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    AFHTTPRequestOperation *option1 =  [manager GET:@"http://www.baidu.com" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"xxxxxxxxxxxx----%@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    }];
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end

5 测试

修改工程内的ViewController类,修改后的内容如下:

.h文件

#import <UIKit/UIKit.h>
#import "XYTestViewController.h"

@interface ViewController : UIViewController


@end
.m文件

//
//  ViewController.m
//  sssssssssss
//
//  Created by mxy on 14-11-11.
//  Copyright (c) 2014年 mxy. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 200, 60)];
    [button setTitle:@"进入下一个VC" forState:UIControlStateNormal];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    
}

- (void)click:(UIButton*)sender {
    NSLog(@"进入下一个VC");
    XYTestViewController *testVC = [[XYTestViewController alloc] init];
    [self.navigationController pushViewController:testVC animated:YES];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

点击运行看看能否正常运行,如果能正常运行就没问题了,然后就能进行下一步了。

6 生成framework

在运行的过程中其实我们已经生成了framework,点击项目中的products,能够看到已经生成的framework,右键show In Finder,能够看到我们生成的framework。在其上级目录会出现四个文件夹:Debug-iphoneos、Debug-iphonesimulator、Release-iphoneos、Release-iphonesimulator,分别对应不同情况下使用的framework。

下面图片中的1、2选择不同,然后commond+b编译出来的framework是不同的:

1 framework框架 2 iPhone模拟器 scheme debug 会编译出Debug-iphonesimulator

1 framework框架 2 IOS Device  scheme debug 会编译出Debug-iphoneos

1 framework框架 2 iPhone模拟器 scheme Release 会编译出Release-iphonesimulator

1 framework框架 2 IOS Device  scheme Release 会编译出Release-iphoneos


设置对外公开的api,如下图:

7 使用

另外新建一个工程,将合适的framework导入到工程内,编写代码使用,由于framework中使用到了AFNetworking,但是并没有将其打包到Framework中,所以新建的工程需要自己手动导入一个framework。如果在代码中遇到如下错误:

dyld: Library not loaded: @rpath/TTTTTTTT.framework/TTTTTTTT
  Referenced from: /Users/mxy/Library/Developer/CoreSimulator/Devices/72AF601F-3B90-4720-ACB0-E98EE7FD26FE/data/Containers/Bundle/Application/5B492415-EB7E-4188-8342-3C4099502F42/testFFFFFF.app/testFFFFFF
  Reason: image not found

上面这个错误我个人理解,是工程编译的过程中没有找到我们自己写的framework。

在工程的buildsetting中搜索runpath search paths,添加$(SRCROOT),然后运行正常。

补充网上看到的一篇文章写得挺好的Xcode 6制作动态及静态Framework。

终于写完了,欢迎拍砖。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xcode6制作framework(使用第三方依赖框架) 的相关文章

  • 通过快速返回键关闭键盘

    我是一名使用 Swift 的初学者程序员 我一直在开发一个待办事项列表应用程序 我试图通过返回键关闭键盘 我尝试过 self view endEditing true 和 resignFirstResponder 方法 但它们都不起作用 这
  • Xcode 6 GM - CLLocationManager

    我有一个使用 Xcode 5 制作的项目 我有一个 ViewController 我在其中使用 CLLocationManager 获取手机位置 我已经实现了这两个 void locationManager CLLocationManage
  • 带有 UIImage 的 Swift 游乐场

    我正在使用 Xcode 6 并且正在尝试重新创建在会话 401 Xcode 6 中的新增功能 期间演示的代码 我已将图像添加到 Images xcassets 称为 Sample 并在游乐场文件中我尝试访问此图像 如演示的那样 我的代码如下
  • Xcode 6 / iOS 8 模拟器数据和 Bundle 文件夹脚本

    在 xcode 6 的最新更改中 app 文件和文档文件夹似乎不再驻留在 iPhone 模拟器目录中的同一文件夹中 以前 我们可以访问目录和 app 文件 Users me Library Application Support iPhon
  • Segue 未获取选定的行号

    我正在将数据从表视图控制器传递到详细视图 我尝试使用indexPath row直接在我的prepareForSegue方法 但是它显示错误 使用未解析的标识符 indexPath 因此 在搜索网络后 我设置了变量indexOfSelecte
  • swift 中的 C 数组内存释放

    var cpuInfo processor info array t nil var numCpuInfo mach msg type number t 0 var coresTotalUsage Float 0 0 var numCPUs
  • Xcode 6 AFURLRequestSerialization 中的自动合成错误

    如何修复我在 Xcode 6 beta 上使用最新 AFNetworking 获得的属性streamStatus和streamError的警告 自动属性合成不会合成 因为它是可读写的 但它将通过另一个属性只读合成 https github
  • iOS 8 模拟器无法启动

    当我尝试在模拟器 iOS 8 0 上使用 Xcode 6 Beta 4 运行我的应用程序时 我总是收到此错误 无法启动 iOS 模拟器 其实我在这个网站上发现了一些类似的问题 我尝试了所有的答案 但仍然无法解决 我在 Xcode 6 Bet
  • Xcode Source Kit 将不会停止使用 Swift 崩溃[重复]

    这个问题在这里已经有答案了 我需要找到一个解决方案来解决 Swift 中超级棒的 Source Kit Crashing 错误 我读过很多堆栈溢出帖子 但似乎没有人有解决方案 如果有一行代码导致了问题 我不可能通过 50 多个源文件来找到它
  • Xcode 6:项目导航器中没有 Frameworks 文件夹

    我正在使用 Xcode 6 并遵循 Xcode 版本 4 教程 因此这里和那里的情况有所不同 我的项目导航器中似乎没有 Frameworks 文件夹 因此当我下载一些 framework 文件并在项目编辑器的构建阶段手动添加它们时 我没有
  • Swift:deinit 方法中没有 println 输出(不使用 Playground)

    这是我的测试代码 在终端中运行 usr bin xcrun swift var count 0 for reference counting class A init count deinit println A deinit count
  • iOS 8 代码适用于 iPhone 5s,但不适用于 iPhone 5

    在 iPhone 5s 模拟器上一直测试我的 spritekit 游戏后 我终于尝试在 iPhone 5 模拟器上运行它 不幸的是 当我第一次触摸时 我就收到了一个我不明白的错误 我的touchesBegan函数调用我的addCoin函数
  • AutoLayout Xcode6:为此需要自动布局约束:

    我是自动布局的新手 我擅长自动调整大小 我的要求是 I have 2 view say blue and green width and height of both view is 300 pixel in iPhone5 height
  • 函数只能在主线程中调用,为什么?

    在下面的代码中 我调用函数 displayMyAlertMessage 两次 我调用的第一个函数工作完美 但第二个函数给我一个错误 指出该函数只能从主线程调用 在我的情况下我该如何做到这一点 我正在使用这段代码 IBAction func
  • XCode 6.0.1 Enterprise In House Distribution 未创建 ipa/plist

    升级到 XCode 6 0 1 后 In House Enterprise Distribution from Archive 现在会创建 pkg 文件 而不是 ipa plist 文件 这打破了我们的企业分配制度 我还没有找到任何有关此更
  • Google Analytics 未在 Swift 中初始化

    由于某种原因 我的新 swift 应用程序没有初始化 Google Analytics 我在项目中为所有 GAnalytics 文件创建了一个桥接标头 import GAI h import GAIDictionaryBuilder h i
  • Swift 为 .toInt 提供Optional(3) 而不是 3

    尝试从字段中提取数字并继续获取可选 数字 而不是数字 IBOutlet weak var years UITextField IBAction func calculateYear sender AnyObject var a years
  • IBDesignable 和 UITableViewCell

    我正在尝试利用 XCode 6 中 Swift 的 IBDesignable 功能来创建 UITableViewCell 的子类 我在 WWDC 演示和网络上看到 您可以使用框架来创建视图 UIView 的子类 然后可以将其用于自定义 UI
  • 使用 Xcode 6 和(可能)cocoapods 生成错误

    在构建使用 cocoapods 和最新 Xcode 6 GM 版本的 iOS 项目时 我收到以下静态分析器错误 error error reading pic error no analyzer checkers are associate
  • 警告:所有应用程序都应包含armv7架构(当前archs =“arm64”)

    警告 所有应用程序都应包含 armv7 架构 当前架构 arm64 我读过其他关于早期版本的 XCode 的文章 但这些示例都没有帮助解决这个问题 看来无论我在设置中添加什么 如下所示 都会有帮助 我仍然遇到同样的错误 项目和目标设置看起来

随机推荐

  • 【DataX】数据同步到PG时遇到的分区不存在问题

    数据同步到PG时遇到的分区不存在问题 前言正文问题分析解决方法 结语 前言 大概说下这个问题牵扯出来的背景 xff0c 一个外场项目 xff0c 选型用PG存业务数据 xff0c 然后客户要求保存保留一年的数据 xff0c 运行到现在服务器
  • 【Linux】Sudo的隐晦bug引发的一次业务问题排查

    Sudo的隐晦bug引发的一次业务问题排查 写在前面问题描述问题排查高负载现象排查日志排查跟踪任务调度过程Sudo引发的问题手动复现 问题分析处理方案 写在前面 记录一次生产环境sudo启动进程频繁被Kill且不报错的异常处理过程 xff0
  • 记一次使用SQOOP抽数到Hive遇到的问题

    记一次使用SQOOP抽数到Hive遇到的问题 前置条件 1 源端数据库类型为Mysql 2 目标端是Hive库 xff0c beeline为1 1 0 3 Hive建表时使用了分桶 xff0c 并且加入了stored as orc参数 xf
  • 我的世界光影使用方法

    光影使用方法 写这个主要是为了记录下最近捯饬我的世界服务端和客户端时遇到的一些东西 xff0c 全当随笔了 首先要确认已经安装了高清补丁 xff0c 这次使用的客户端版本是1 12 2 1 下载光影压缩包 xff0c 一般都是zip格式 2
  • 【系统篇 / 配置】❀ 05. 新建管理帐户 ❀ Windows Server 2016

    简介 Windows Server 2016 安装完成后 xff0c 默认的管理帐户是administrator xff0c 拥有绝对权限 xff0c 但是在日常管理中不建议使用这个帐户 xff0c 一旦密码泄露 xff0c 服务器就门洞大
  • 【系统篇 / 域】❀ 04. 组 ❀ Windows Server 2016

    简介 如果能够使用组 xff08 group xff09 来管理用户帐户 xff0c 则必定能够减轻许多网络管理负担 对某个组设置权限后 xff0c 此组内的所有用户都会自动拥有此权限 新建组 可以通过 Active Directory 用
  • Gson源码之TypeAdapterFactory

    TypeAdapterFactory 1 接口类 xff0c 主要是用来创建TypeAdapter对象的2 若Json中的数据结构相同 xff0c 可以进行共享3 其实现类分别是JsonAdapterAnnotationTypeAdapte
  • 如何修改Win10的Windows Terminal的背景(带图文)

    效果图 Windows PowerShell的下载 在Win10上已经带有了新出的Windows Terminal xff08 preview xff09 相对于cmd的界面已经好看了很多 xff0c 但是对着黑乎乎的背景还是容易让人萌发想
  • 普通类和抽象类有哪些区别?

    普通类和抽象类有哪些区别 xff1f 抽象类不能被实例化抽象类可以有抽象方法 xff0c 抽象方法只需申明 xff0c 无需实现含有抽象方法的类必须申明为抽象类抽象的子类必须实现抽象类中所有抽象方法 xff0c 否则这个子类也是抽象类抽象方
  • 美团技术十年:让我们感动的那些人那些事

    时光荏苒 xff0c 美团十岁了 xff0c 美团技术团队也走过了十个春秋 2010年3月4日美团网上线的时候 xff0c 整个公司总共十来人 xff0c 在一套三居室的民房里起步 其中技术团队只有5个人 xff0c 现在有4位还在美团 今
  • linux update kernel

    1 update source step 1 deb https mirrors zju edu cn ubuntu focal main restricted universe multiverse deb https mirrors z
  • sql基础知识left join,right join,inner join区别

    1 left join即以左表为主查出左边表对应的所有数据 lt pre name 61 34 code 34 class 61 34 sql 34 gt select from A left join B on A id 61 B pid
  • 明知 | TypeScript 结合 egg.js 基本使用

    小小又进入了学习状态 xff0c 此时小小由于最近接触了js的相关内容 xff0c 进而接触了一些ts相关的内容 xff0c 所以小小本次主要学习的内容是ts 安装相关依赖 这里安装两个依赖 xff0c 分别为egg和ts 安装ts 这里需
  • 数据库中like的用法

    转自 xff1a http www pinlue com article 2020 03 3100 0310073883813 html
  • Log4j 2使用教程

    转载自 Blog of 天外的星星 xff1a http www cnblogs com leo lsw p log4j2tutorial html Log4j 2的好处就不和大家说了 xff0c 如果你搜了2 xff0c 说明你对他已经有
  • http常见的响应状态码

    HTTP响应状态码分类 1XX xff1a 100 199 信息响应 2XX xff1a 200 299 成功响应 3XX xff1a 300 399 重定向 4XX xff1a 400 499客户端错误 5XX xff1a 500 505
  • vncserver无法启动

    一 问题现象 运行vncserver的时候提示出错 xff0c 查看vnc的日志发现如下错误日志 litin 64 linuxService vnc cat linuxService 4 log Xvnc Free Edition 4 1
  • MongoDB自学笔记12---4.4 更新文档

    4 4 更新文档 Mongodb的增删查都已经学完了 xff0c 只剩下更新了 在mongodb中提供了update 和save 方法用于更新一个文档 xff0c update 是使用最多的 xff0c save 在前面4 1插入文档的时候
  • ffmpeg重要结构体之AVCodec和AVIOContext

    今天继续讲解ffmpeg结构体AvCodec和AVIOContext以便加深对ffmpge的理解 一 AVCodec的讲解 AVCodec结构体是有关codec的结构体 在文件 34 libavcodec avcodec h 34 中 其中
  • xcode6制作framework(使用第三方依赖框架)

    这两天由于会用到framework所以研究了一下framework的制作 xff0c 我用到了xcode6 1 AFNetworing 转载请注明http blog csdn net mengxiangyue 废话不多说了 xff0c 下面