https://www.jianshu.com/p/d146db167bf3

项目开发时经常会遇到个别模块想打包成framework的情况,传统的打包方式太繁琐,反复测试时很麻烦,不如一个项目管理来得方便。
这里记录一下用一个Workspace方式管理项目依赖的方式。由于图是两天前截的,按图码字,有疏漏之处还请见谅。

1.新建Workspace:

1.1 Xcode -> File -> New -> Workspace并放到Test文件夹下

2.新建TestProject和FrameworkProject:

2.1 Xcode -> File -> New -> Project,同样放在Test文件夹下

 
Test文件夹状态

2.2 在Xcode中将这两个Project添加到Workspace

 
Workspace状态

3.添加Target到FrameworkProject

3.1 FrameworkProject -> Targets -> [+]

 
添加Target

选择Cocoa Touch Framework

 
选择最下面的Framework

命名为TestFW,先不要选Embed in App

 
命名为TestFW

可以看到Targets下面新增了一个Framework

 
Targets

4.添加Framework到TestProject

4.1 TestProject ->Targets -> General -> Embedded Binaries -> [+]

 
添加Binaries

可以看到刚刚生Target的Products已经列了出来,选择TestFW.frameworkiOS

 
选择framework

framework嵌入成功

 
嵌入的framework

可以看到在Project中也显示出来了,不要在意红色,因为在编译TestProject时会先编译它依赖的framework,这也是这种方法建立项目依赖的方便之处,不需要额外手动编译framework。

 
嵌入的framework

如果看着不舒服,可以移动到项目的Frameworks文件夹(Tips:看不到Frameworks文件夹可以先随便嵌入一个系统库,比如UIKit.framework,然后再删掉,就可以看到Frameworks文件夹了)。

 
移动好的Framework

4.2 添加测试方法

这里举例添加方法到ViewController中,注意这是错误演示,下面会说明。

 
ViewController.h
 
ViewController.m

当然不要忘了在暴露的.h中#import "ViewController"

 
23.png

运行,发现报错,提示找不到ViewController,导致无法编译framework模块

 
找不到ViewController

原来是新增的Target中不包含ViewController这个类。
解决方法:选择ViewController.h -> TargetMembership -> 勾选TestFW

 
勾选TestFW

再次运行,发现helloFramework方法并没有调用,并且控制台输出提示ViewController这个class被两个类文件同时生成了,一个是TestProject项目,一个是TestFW这个framework。

 
控制台输出

解决方法:把两个ViewController其中一个改下名字就可以了,这里我把framework中的ViewController改名为TestViewController(当然里面的类名也一定要改啊)。

 
ViewController改为TestViewController

可以看到输出正常了。

 
hello
[重点] 所以说,自己生成的framework一定要一个特殊的类名前缀,否则很容易和项目中某个类冲突。

4.3 添加测试类
当然实际使用时基本不会使用默认的ViewController类,都会自己新建一个或几个类来实现。注意新建类时一定要选择对应的Target,否则就会出现无法编译的问题。

 
选择TestFW

自己添加类后,运行,依然报错?找不到helloFramework方法,什么鬼?

 
找不到方法

解决方法:FrameworkProject -> Targets -> TestFW -> Build Phases -> Headers,将Project中新增的方法,拖到Public下。否则编译器将新增的方法视为私有的,无法被TestFW.h引用。

 
移动到Public

移动后

 
Public

至此,就大功告成了。
当然,这种方法适用于将现有项目简单的打包,如果想从0完全新建framework,那在新建项目时直接选择Cocoa Touch Framework就好,这样会少生成很多AppDelegate之类的文件。

 
新建framework

iOS开发之通过Framework建立项目依赖的更多相关文章

  1. iOS开发拓展篇——如何把项目托管到GitHub

    iOS开发拓展篇——如何把项目托管到GitHub 说明:本文主要介绍如何把一个OC项目托管到Github,重操作轻理论. 第一步:先注册一个Github的账号,这是必须的 注册地址:Github官网注 ...

  2. iOS 开发 旧版 framework

    0. 参考 http://www.cocoachina.com/ios/20150127/11022.html http://www.cnblogs.com/gcb999/p/3296414.html ...

  3. MVC5 网站开发实践 1、建立项目

    目录 MVC5 网站开发实践 概述   一.建立项目 1.建立团队项目 在办公室和家里使用不同的电脑,为了方便代码的共享将项目建立为团队项目.   如图打开vs2013→新建→团队项目(图1),会自动 ...

  4. iOS开发——实用篇Swift篇&项目开发常用实用技术

    项目开发常用实用技术 实现拨打电话 要实现打电话功能,最简单最直接的方式便是:直接跳到拨号界面 (注意:这个需要真机调试,模拟器无效果)     UIApplication.sharedApplica ...

  5. IOS开发实战-Xcode创建HelloWorld项目

    一.创建工程打开Xcode开发工具,在Welcome界面选择”Create a new Xcode project”选项 在选择模板窗口,选择”Single View Application” 确定模 ...

  6. iOS开发之——制作framework静态库教程

    环境: 硬件:macbook air 系统:OSX EI Capitan 版本:10.11.3 xcode : Version 7.2.1 (7C1002) 最近在做ios的静态库(据说framewo ...

  7. ios开发——实战Swift篇&简单项目的实现

    学了这么久的swift语法和相关技术,今天忍不住手痒痒就写了一个swift的小项目,这个项目非常简单(只是使用一个UITableView),但是里面的功能却非常有用. 我们要实现的功能是这样的: 程序 ...

  8. iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧

    1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...

  9. iOS开发小技巧--即时通讯项目:使用富文本在UILabel中显示图片和文字;使用富文本占位显示图片

    Label借助富文本显示图片 1.即时通讯项目中语音消息UI的实现,样式如图: 借助富文本在UILabel中显示图片和文字 // 1.创建一个可变的富文本 NSMutableAttributedStr ...

随机推荐

  1. spring自动装配和通过java实现装配

    1.组建扫描 在类上添加注解@Component注解可以实现组建扫描 @Component public class A{ ... } 2.自动装配 通过在属性上或者方法上添加@Autowired注解 ...

  2. 【译】通过 Rust 学习解析器组合器 — Part 1

    原文地址:Learning Parser Combinators With Rust 原文作者:Bodil 译文出自:掘金翻译计划 本文永久链接:https://github.com/xitu/gol ...

  3. L2-2 小字辈

    思路 bfs搜一下. 代码 #include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; vector<i ...

  4. 微信h5游戏如何在微信中做好域名防封 防屏蔽的 工作

    最近微信开始大封杀,不知道原因是什么,可能是因为违规网站太多了吧,很多网站都被错杀了,下面我们聊一下怎样才能避免域名被封杀呢. 在各种不同的域名当中,能够做出了更适合的选择,这些对于大家域名防封_域名 ...

  5. JFrog推出全球首个支持混合云架构,端到端的通用DevOps平台 ——JFrog Platform

            JFrog Platform,基于屡获殊荣的JFrog Artifactory制品仓库的独特能力,通过多合一的体验提供DevSecOps.CI / CD和软件分发的解决方案. 2020 ...

  6. Linux - Shell - #!/bin/bash

    概述 简单解释一下 shell 脚本卡头的 #!/bin/bash 水一篇, 少一篇 背景 shell 脚本中的注释 通常是 以# 卡头的行 但是有时候执行 shell 的时候, 会有这种内容 #!/ ...

  7. Python多线程join/setDaemon

    import threading, time class Test(): def test1(self): print("--") time.sleep(3) print(&quo ...

  8. eclipse报错:unable to install breakpoint in .......due to missing line number attributes

    报错信息如下: 解决方案方案1.把断点都干掉,再启动.应该是代码更新后,断点位置没有代码了或位置改变了. 方案2.在Eclipse - Preferences - Java - Complier 下  ...

  9. Scrapy爬取伯乐在线的所有文章

    本篇文章将从搭建虚拟环境开始,爬取伯乐在线上的所有文章的数据. 搭建虚拟环境之前需要配置环境变量,该环境变量的变量值为虚拟环境的存放目录 1. 配置环境变量 2.创建虚拟环境 用mkvirtualen ...

  10. 概率dp light 1321

    题意:给定一张无向图,每条边都有一个通过的概率 ,如果无法通过,那么就要回到起点重新出发从起点到终点的时间固定为K,如果成功到达,又需要额外花费K的时间,问走S次的最小期望时间 思路:这道题分为两部分 ...