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

时间: 2024-10-26 12:54:08

bundle与package区别与联系的相关文章

bundle和package

 bundle是apple提供的软件安装的便捷方法.bundle为用户和开发者提供了一个简单地接口. bundle和package      package:看起来像一个文件的目录      bundle:一个目录,有标准的层次结构,包含了可执行文件和必须的资源,看起来像一个文件. package提供了一种让电脑更好用的抽象基础.在电脑中的应用或者插件其实就是一个目录.这个目录里包含了一个应用所需要的所有,包括可执行代码和资源.在Finder中这个目录被认为是一个文件.这样应用管理起来很方便.

在Activity之间使用Intent传值和Bundle传值的区别和方式

两者本质上没有任何区别.Bundle只是一个信息的载体 将内部的内容以键值对组织 Intent负责Activity之间的交互 自己是带有一个Bundle的Intent.putExtras(Bundle bundle)直接将Intent的内部Bundle设置为参数里的bundleIntent.getExtras()直接可以获取Intent带有的Bundle intent.putExtra(key, value)和Bundle bundle = intent.getExtras();bundle.p

folder、source folder、package 区别与联系

在eclipse下,package,source folder,folder都是文件夹. 它们的区别如下:  package:当你在建立一个package时,它自动建立到source folder下,也只能建立在这个目录之下. source folder:存放java源代码的文件夹,当然也包括一些package文件夹,还可以包含其他文件.  项目构建后,source folder里面的java自动编译成class文件到相应的/web-inf/classes文件夹中,其他文件也会移到/web-in

Intent 传值和 Bundle传值的区别

http://blog.csdn.net/yanzi1225627/article/details/7802819 举个例子  我现在要从A界面   跳转到B界面或者C界面   这样的话 我就需要写2个Intent  如果你还要涉及的传值的话 你的Intent就要写两遍添加值的方法 那么 如果我用1个Bundle  直接把值先存里边 然后再存到Intent中 不就更简洁吗? 另外一个例子  如果我现在有  Activity A ,B ,C:现在我要把值通过A经过B传给C你怎么传 如果用Inten

plist文件里的"Bundle versions string, short" 跟 "Bundle version" 的区别及作用

Bundle versions string, short:用于itunes上显示的版本号,即对外的版本,一般除了版本迭代外,不能随意更改. Bundle version:内部项目管理的版本号,是给程序员看的,不对外的,可以随意更改,当Bundle Version String缺省时,Bundle Version替代Bundle Version String的功能,同时也继承他的限制(比如格式,位数等),需与itunes上的版本号保持一致.

compile Sources 和 Copy Bundle Resources的区别

CopyBundle Resources 主要是一些资源文件会被打包的时候会被放入app中. 我见过的内容有: xib文件,图片资源,xxxSDK.bundle,html文件,js文件. 我曾经碰到一个问题就是我在模拟器和设备中调试的时候都可以运行hmtl和js文件.可是打包给客户发现js失效了, 打开包内容发现少了js文件,最后在这里面手动添加进去之后,在打包才发现js进去了.所以你懂的.这些可以理解为出了.h.m文件之外的资源文件 Compile Sources就是.h和.m文件的集合,因为

Xcode中Info.plist文件里的"Bundle versions string, short" 跟 "Bundle version" 的区别

Bundle versions string, short:用于itunes上显示的版本号,即对外的版本.(最多是3个部分组成即 x.y.z) Bundle version:内部项目管理的版本号,不对外.所以可以定义任意形式. 一般是Bundle version每次加一就好了.

Bundle、Intent、SharedPreferences

Intent与Bundle的共同点:都继承Parcelable Intent传值与Bundle传值的区别 eg:我现在要从A界面   跳转到B界面或者C界面   这样的话 我就需要写2个Intent  如果你还要涉及的传值的话 你的Intent就要写两遍添加值的方法 那么 如果我用1个Bundle  直接把值先存里边 然后再存到Intent中 就更简洁吗? eg:  如果我现在有  Activity A ,B ,C:现在我要把值通过A经过B传给C你怎么传 如果用Intent的话   A-B先写一

iOS开发里的Bundle是个啥玩意?!

初学iOS开发的同学,不管是自己写的,还是粘贴的代码,或多或少都写过下面的代码 [[NSBundle mainBundle] pathForResource:@"someFileName" ofType:@"yourFileExtension"]; [YourViewController initWithNibName:"YourViewController" bundle:nil]; 可是你知道这里的bundle到底是个啥玩意呢?! Bundl