bundle与package区别与联系
转:http://blog.csdn.net/lmbda/article/details/17895619
bundle是Apple提供的软件安装的便捷方法。
bundle为用户和开发者提供了一个简单地接口。
bundle和package
package:看起来像一个文件的目录
bundle: 一个目录,有标准的层次结构,包含了可执行文件和必须的资源,看起来像一个文件。
package提供了一种让电脑更好用的抽象基础。在电脑中的应用或者插件其实就是一个目录。这个目录里包含了一个应用所需要的所有,包括可执行代码和资源。在Finder中这个目录被认为是一个文件。这样应用管理起来很方便。
package是用于提升用户体验的,bundle更进了一步,让开发者和操作系统更爽了。bundle中包含了代码和资源是怎么与应用联系的。这种组织方式也为本地化提供了便利。
系统是怎么区别bundle和package的?
Finder使用一下条件判断是否为package
1. 有特定的扩展名:.app, .bundle , .framework , .plugin , .kext等
2. 有一个其他应用声明为package类型的扩展名
3. 目录的package位设置了
bundle的优点
bundle为开发者提供了很多便利:
1. 因为bundle就是一个目录层次,包含了应用文件。所以可以像平时操作文件一样操作bundle中的资源
2. bundle的结构是多国语言支持很方便。
3. bundle可以存储在不同的文件系统中
4. 用户可以非常方便地安装移除应用
5. bundle看起来像一个文件,以防其中的文件改变而是应用破坏
6. 大多数的可执行文件都能做成bundle
7. bundle是自治的
bundle的种类
1. Application
2. Frameworks
3. Plug-Ins
bundle指南
1. 为bundle设置一个Info.plist文件。确保包含了推荐的keys。
2. 如果应用依赖某个文件,把它放到bundle中。应用应该包含用到的图片,字符文件,本地化资源,插件。
3. 如果要从bundle中加载C++的代码,最好标记为extern "c"。bundle不能识别C++扩展。
4. NSBundle不能加载 Code Fragment Manager 代码,需要使用CFBundleRef或CFPlugInRef
5. 必须使用NSBundle对象加载bundle中的Java代码
6. 加载OC代码时,NSBundle与CFBundleRef都可以。但是NSBundle是惰性加载,而CFBundle是立刻加载。 NSBundle加载完成会发出NSBundleDidLoadNotification通知。
应用bundle里有什么?
1. Info.plist(必须) information property list,包含了应用的配置信息。(是一个xml文件)
2. Executable(必须 )包含了应用的入口和静态链接的代码。
3. Resourcefiles 包括图片,图标,音频,nib文件,字符串文件,配置文件,数据文件。资源文件可以
通过本地化配置为不同语言
4. 其他支持文件 Mac应用可以额外的嵌入高级的资源,比如private frameworks,plug-in,文档模板,
自定义数据。在iOS中不能包含自定义framework或plug-in。
iOS应用bundle结构
MyApp.app
MyApp 可执行文件
MyAppIcon.png 图标
MySearchIcon.png 图标
Info.plist 配置信息(bundle ID,版本号,显示名字)
Default.png 加载时的图片
MainWindow.nib 主nib文件(推荐)
Settings.bundle 偏好设置
MySettingsIcon.png 图标
iTunesArtwork
en.lproj 本地化(language.lproj)
MyImage.png
fr.lproj
MyImage.png
Info.plist文件中需要设置的键
CFBundleDisplayName 应用的名字
CFBundleIdentifier 应用的识别符
CFBundleIconFiles 一组图标,用于应用
CFBundleFiles 一组字符串,应用中图标的名字
LSRequiresIPhonesOS 标记了是否只能在iOS上运行(默认为TRUE)
UIRequiredDeviceCapabilities
Info.plist中一般要有的键
NSMainNibFile 主nib file的string名
UIStatusBarStyle 一个描述了应用载入时状态条的样式的字符串,默认为UIStausBarStyleDefault
UIStatusBarHidden 应用加载时状态条是否隐藏
UIInterfaceOrientation 应用加载时的朝向,默认UIInterfaceOrientationPortrait
UIPrerenderedIcon 应用图标是否高亮
UIRequiresPersistentWiFi 一个布尔值,说明是否使用Wi-Fi网络通信。
UILaunchImageFile 说明加载图片的字符串,不设置就默认是Default
本地化包的结构
en.lproj/
CustomView.nib
bird.png
Bye.txt
Localizable.strings
jp.lproj/
CustomView.nib
bird.png
Bye.txt
Localizable.strings
bundle与package区别与联系的更多相关文章
- Android中Intent传值与Bundle传值的区别详解
Android中Intent传值与Bundle传值的区别详解 举个例子我现在要从A界面跳转到B界面或者C界面 这样的话 我就需要写2个Intent如果你还要涉及的传值的话 你的Intent就要写两 ...
- MANIFEST.MF Error: No available bundle exports package
Issue: When you imported some 3rd jars and compiled MANIFEST.MF, you may got following compling erro ...
- bundle 与 package
bundle是Apple提供的软件安装的便捷方法. bundle为用户和开发者提供了一个简单地接口. bundle 和 package package:看起来像一个文件的目录 bundle ...
- folder、source folder、package 区别与联系
在eclipse下,package,source folder,folder都是文件夹. 它们的区别如下: package:当你在建立一个package时,它自动建立到source folder下 ...
- 在Activity之间使用Intent传值和Bundle传值的区别和方式
两者本质上没有任何区别.Bundle只是一个信息的载体 将内部的内容以键值对组织 Intent负责Activity之间的交互 自己是带有一个Bundle的Intent.putExtras(Bundle ...
- idea工具maven生命周期clean,compile,install,package区别
idea工具maven projects里面有9种生命周期,今天刚好遇到,顺便分享下自己的理解.生命周期是包含在一个项目构建中的一系列有序的阶段.最常用的两种打包方法:一:clean,package( ...
- plist文件里的"Bundle versions string, short" 跟 "Bundle version" 的区别及作用
Bundle versions string, short:用于itunes上显示的版本号,即对外的版本,一般除了版本迭代外,不能随意更改. Bundle version:内部项目管理的版本号,是给程 ...
- Compile Sources 和 Copy Bundle Resources的区别
Compile Sources主要存放.m文件 Copy Bundle Resources 主要存放xib plist bundle js 文件
- Intent 传值和 Bundle传值的区别
http://blog.csdn.net/yanzi1225627/article/details/7802819 举个例子 我现在要从A界面 跳转到B界面或者C界面 这样的话 我就需要写2 ...
随机推荐
- 常见算法是js实现汇总(转载)
常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...
- 前端开发必备! 20 个强大的 Sublime Text 插件
http://www.oschina.net/translate/20-powerful-sublimetext-plugins http://www.w3cplus.com/tools/emmet- ...
- 转 SVN 在vs中的使用
给大家介绍一些SVN的入门知识!希望对大家的学习起到作用! 关于SVN与CVS的相关知识,大家可以自己去google一下. 一.准备 SVN是一个开源的版本控制系统 ...
- hdu 5818 (优先队列) Joint Stacks
题目:这里 题意: 两个类似于栈的列表,栈a和栈b,n个操作,push a x表示把数x放进a栈的栈底,pop b 表示将栈b的栈顶元素取出输出,并释放这个栈顶元素,merge a b表示把后面的那个 ...
- mfc中CString转化为string的方法
LL(1)分析法实验的mfc做到最后因为CString转化为string的问题卡了一个多小时,也是惨,网上各种方法找过都不行.幸亏最后还是找到几行代码搞定了.特此mark一下. USES_CONVER ...
- mysql 大小写 整理
mysql字段的值默认不区分大小写,如果有主键的表,主键列就不能插入重复的值(大小写不同) 实验 默认方式创建 CREATE TABLE `t1` ( `ID` varchar(40) CHARACT ...
- 咏南IOCP中间件支持海量并发方案(集群)
咏南IOCP中间件支持海量并发方案(集群) 支持D7~XE10.1.1开发 支持负载均衡,自动故障转移 可以在不停机的状态下,根据负载情况灵活增加中间件机器 中间件使用IOCP通信,单中间件支持并发数 ...
- [Chapter 3 Process]Practice 3.9 Describe the actions token by a kernel to content-switch between processes.
3.9 Describe the actions token by a kernel to content-switch between processes. 答案: 内核在进行进程上下文切换时, 首 ...
- C# 基础(4)
Ref 按地址传递,引用传递:即可以往外返值,也可以对内传值. Out是用于传出值, Ref是双向的,即可以传入,也可以传出. 在传参过程中,如果参数有out,那么改变方法中参数的值,调用者方法中变量 ...
- java内部类和匿名内部类
内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ...