bundle 的生成和使用
一、bundle 的生成
1、打开XCode,创建iOS版用的bundle资源包,有两种方式:第一种直接将工作,open in finder.在目录中直接新建文件夹,文件夹以bundle格式。文件夹就会变成通用的Bundle包样式。如此可以看出来bundle其实就是一个文件夹,与文件夹的操作相同。第二种方式是在主目录中,New file...选择iOS-》Resource-》Settings Bundle.
第三种方式,在framework里集成bundle.详见图。选择OS X 的Bundle。因为Xcode7中iOS里没有Bundle.通过修改bundle的属性来试用iOS。
2、在工程里添加你需要的内容 如图片资源等.目录束里面的xib,图片资源等,会自动收录到bundle文件夹中。
3、选择debug 或 release 条件编译Bundle
二、bundle 的使用
1、将制作好的bundle拖曳至项目中
2、使用Bundle中的资源
UIImageView *imageView =[[UIImageView alloc]initWithFrame:CGRectMake(50, 50, 200, 200 )];
NSString *bundlePath =[[NSBundle mainBundle]pathForResource:@"pictureBundle" ofType:@"bundle"];
NSString *picturrePath =[bundlePath stringByAppendingPathComponent:@"Contents/Resources/fbb01.jpg"];
UIImage *image =[UIImage imageWithContentsOfFile:picturrePath];
imageView.image = image;
[self.view addSubview:imageView];
3、编译工程后,经验证成功使用了bundle中的资源。
Xcode7.3 制作通用的framework 原文地址
http://www.jianshu.com/p/0fed418f228c#
1.新建一个工程.
file→ new→ project, 弹出框中选择iOS→ framework & library中的cocoa touch framework.点击Next,输入product name: TestFramework, 点击Next→ 点击Create.
2.删除向导所生成工程中的Target.
点击工程名→ 点击TARGETS → 右键Delete.
3.增加一个新的Target.
点击Target底部的"+"号,弹出框中选择OS X→ Framework & Library中的Bundle.点击Next,输入product name TestFramework, 点击Finish.
4.修改新建 Target 的 Building Settings 项.
a: 选中TARGET→ Build Settings项, 将Architectures→ Base SDK 改为Latest iOS(iOS 9.0), 将Architectures 改为 $(ARCHS_STANDARD);
b: 在 Deployment项, 选中"Mac OS X Deployment Target", 点击键盘上的Delete键, 将“Targeted Device Family”改成"1,2";
c: 在 (null) - Deployment项, 修改"iOS Deployment Target"为"6.0",同时修改PROJECT的info下的Deployment Target → "iOS Deployment Target"为"6.0";
d: 在Linking项, 将"Dead Code Stripping" 改为"NO", "Link With Standard Libraries" 改为 "NO", 将 "Mach-O Type" 改为"Relocatable Object File";
f: 在Packing项, 将"Wrapper Extension" 改为 "framework";
5.修改 Target 的 Info 项.
点击Info, 将 "Bundle OS Type code" 改为 "FMWK"
6.将要写入源码文件拖入工程目录, 这里以一个简单的语句输出作为例子
Command+N 新建一个cocoa Touch class, 名字为TestLog, 点击Next, 点击create;
TestLog.h代码如下:
#import <Foundation/Foundation.h>
@interface TestLog : NSObject
- (void)TestLog;
@end
TestLog.m代码如下:
import "TestLog.h"
@implementation TestLog
- (void)TestLog
{
NSLog(@"这里是静态库输出日志\n");
}
@end
7.删除TestFramework.m, 修改TestFramework.h内容如下:
ifndef TestFramework_h
define TestFramework_h
//这里没有提示,一定手打
import <TestFramework/TestLog.h>
endif
8.暴露Headers供外部项目调用接口.
选中Target下的Build Phases, 点击左上角"+"号→ "New Headers Phase", 展开Headers, 点击左下角"+", 选择"TestFramework.h"和"TestLog.h"→ 点击add, 将这两个头文件拖动到上方Public下.
9.然后分别在iOS Device 和 iOS Simulator 下编译.
在Window→ Projects中左边选择TestFramework工程, 点击右边的Derived Data右边的箭头,打开Finder, 在../Build/Products目录下有真机和模拟器生成的TestFramework.framework
10.合并Framework.有两种方式
第一种
打开终端, 输入:
cd /Users/用户名/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products, 回车;
可以输入lipo -info XXX 来查看库的信息, armv7 arm64的是真机, X86_64的是模拟器;
输入命令:
lipo -create /Users/用户名/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products/Debug-iphoneos/TestFramework.framework/TestFramework /Users/用户名/Library/Developer/Xcode/DerivedData/TestFramework-aainjryhnvupalarkmoushxwuwdr/Build/Products/Debug-iphonesimulator/TestFramework.framework/TestFramework -output NewTestFramework
在Products目录下会生成一个NewTestFramework的文件, 将该文件拷贝覆盖TestFramework.framework目录下的TestFramework文件, 新的TestFramework.framework就是真机和模拟器通用的framework.
第二种
在Build Phases中添加一个RunScript
合并可以通过runScript
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
open "${DEVICE_DIR}"
open "${SRCROOT}/Products"
fi
bundle 的生成和使用的更多相关文章
- Application Loader上传app时报错:the bundle identifier cannot be changed from the current value
报错如图: 解决:用info.plist中的bundle identifier生成发布证书(Distribution),如图:
- webpack 配置 (支持 React SCSS ES6 编译打包 和 模块热更新 / 生成SourceMap)
1.首先是目录结构 |-node_modules/ #包文件 |-build/ #静态资源生成目录 |-src/ #开发目录 |-js/ |-index.js #入口文件 |-app.js #Reac ...
- 生成一个ipa的包,使非开发机也能安装成功 (Xcode5.1)
for example: 想为com.apple.cloud的bundle identifier生成一个非开发机也能安装的ipa包.你需要一个apple的企业账号(apple有两种账号:开发者账号和企 ...
- 冗余代码都走开——前端模块打包利器 Rollup.js 入门
之前翻译过一篇文章,介绍了通过 ES2015 的解构赋值语法引入模块,可以让打包工具(browserify)最终编译出来的代码量最小化. 殊不知在 webpack 1.X 版本是无法利用该特性来避免引 ...
- 【JavaScript】 Webpack安装及文件打包
背景 最近开启一个新项目,需要对前端的各类资源文件进行打包,经过多方调研后,决定使用webpack工具.但是网上的教程多是将webpack直接作为服务器使用,而我只是想将其作为单纯的资源打包工具而已. ...
- IOS开发基础知识--碎片42
1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...
- Webpack 入门指南 - 1.安装
Webpack 是目前流行的打包工具,如何安装它呢? 1. 安装 Node Js 首先,Webpack 是基于 NodeJs 的工具,你必须首先安装 NodeJs. NodeJs 仅仅只需要在你的系统 ...
- Fragment笔记整理
前言 一直在用Fragment,但是没有系统的整理过,Google了一下相关文章,看到了几篇,将几篇还不错的文章重点整理了下,很多是直接Copy的,只为做个笔记,以后翻来看比较方便,建议大家看一下下面 ...
- 基于 HTTP/2 的全新 APNs 协议
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotifi ...
随机推荐
- UiPath之数据透视表
今天给各位小伙伴们讲讲如何使用UiPath来创建数据透视表,相信大家在Execl中经常会使用. ---小U的QQ群(714733686):小U的订阅号[UiPath8888]--- 在UiPath里面 ...
- Linux Shell | 解析xml节点
01 xml文件 # user.xml <user> <name>Toy</name> <sex>man</sex> <room/&g ...
- 你不知道的JS系列【1】- 什么是作用域
几乎所有的编程语言都能够储存变量,并且能在之后对这个变量值进行访问或修改,正是储存和访问变量的能力将状态带给了程序,那么,这些变量储存在哪里呢?程序需要时又是如何找到他们?这些问题说明需要一套设计 ...
- CentOS7安装PPTP
CentOS7安装PPTP VPN(开启firewall防火墙) 1 准备一个CentOS7服务器 2 检查是否支持PPTP && echo ok #返回OK ...
- 用maven创建web项目(spring Mvc)
用maven创建web项目(spring Mvc) 1.打开cmd进入到你要创建maven项目的目录下: 2.输入以下命令.然后根据提示输入相应的groupId.artifactId.version: ...
- 100天搞定机器学习|Day56 随机森林工作原理及调参实战(信用卡欺诈预测)
本文是对100天搞定机器学习|Day33-34 随机森林的补充 前文对随机森林的概念.工作原理.使用方法做了简单介绍,并提供了分类和回归的实例. 本期我们重点讲一下: 1.集成学习.Bagging和随 ...
- CSS RESET —— 浏览器样式重置
CSS Reset 1. CSS Reset为什么存在? 只要您的客户存在使用不同浏览器(ie,firefox,chrome等)的可能,那你就不得不从完美的理想状态回到现实,因为不同核心的浏览器对CS ...
- Java描述设计模式(22):策略模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 每年双十一,各大电商平台会推出不同的满减策略,当用户的消费金额满一定额度后,会进行减去一定的优惠额度,从而来一波清仓甩卖,使用策 ...
- window系统下删除多余的引导
window系统下删除多余的引导 1.首先第一步进入EFI分区删除多余系统引导,只留下需要的引导 如何进入EFI分区 a)win 搜索框输入cm, 右键以管理员运行命令行 b)输入命令 diskpar ...
- config system setting for elasticsearch
1. disable swapping. swap 分区会导致garbage collections 花费太多时间,elasticsearch 响应变慢. 方法1:swapoff -a 方法2:vi ...