bundle和package

 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

飞机票:http://blog.csdn.net/lmbda/article/details/17895619

时间: 2024-10-18 07:07:10

bundle和package的相关文章

bundle与package区别与联系

转:http://blog.csdn.net/lmbda/article/details/17895619 bundle是Apple提供的软件安装的便捷方法. bundle为用户和开发者提供了一个简单地接口. bundle和package    package:看起来像一个文件的目录    bundle: 一个目录,有标准的层次结构,包含了可执行文件和必须的资源,看起来像一个文件. package提供了一种让电脑更好用的抽象基础.在电脑中的应用或者插件其实就是一个目录.这个目录里包含了一个应用所

Android开发Android ADT Bundle下载[Android ADT Bundle 0917,SDK Tools r22.2.1]

开发Android应用程序环境搭建 1.安装JDK1.6以上版本 我们可以打开Oracle公司的网站 http://www.oracle.com/technetwork/java/javase/downloads/index.html 在网页上的Downloads部分有JDK下载说明 接受他的使用条款后免费下载 下载时要在下载列表中选择与本机操作系统相同的JDK版本 下载后安装即可 2.下载ADT Bundle相应平台的Package,解压后即打开eclipse包中的eclipse.exe即可开

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

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

收藏收藏(关于bundle的一些片面化讲解)

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

Android开发工具

最近 Google 被墙了, 上传一下自己收集的 Android 开发环境, 下面给出的官网链接也可以下载; 1. 百度网盘下载地址 Android集成环境 NDK JDK 总链接 : http://pan.baidu.com/s/1bnjaDKb; Android Studio Linux版 : http://pan.baidu.com/s/1eQjA6MA ; Adt Bundle windows 64位版 : http://pan.baidu.com/s/1bnvlVnL; Adt Bun

android分析之消息处理

前序:每个APP对应一个进程,该进程内有一个ActivityThread的线程,称为主线程(即UI主线程),此外,还有其他线程,这个再论. android的消息系统分析. 每个Thread只对应一个Looper 每个Looper只对应一个MessageQueue 每个MessageQueue中有N个Message 每个Message中最多指定一个Handler来处理事件 一个Thread可以对应多个Handler Looper负责从消息队列中(MessageQueue)取出消息(Message/

Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载

原文:http://blog.csdn.net/shulianghan/article/details/38023959 最近 Google 被墙了, 上传一下自己收集的 Android 开发环境, 下面给出的官网链接也可以下载; 1. 百度网盘下载地址 Android集成环境 NDK JDK 总链接 : http://pan.baidu.com/s/1bnjaDKb; Android Studio Linux版 : http://pan.baidu.com/s/1eQjA6MA ; Adt B

[Android源代码分析]Android消息机制,Handler,Message,Looper,MessageQueue

最近准备把Android源码大致过一遍,不敢私藏,写出来分享给大家,顺便记录一下自己的学习感悟.里面一定有一些错误的地方,希望广大看客理解理解. 网上也有不少分析文章,这里我尽量分析的更加细致详尽.不留死角. 一.核心循环体:Looper.loop(); 我们知道,在线程run()中Looper.prepare();Looper.looper().之后这个线程就是一个HandlerThread了.我们可以通过Handler在另外一个线程中(自己也可以)向这个线程发送消息,在这个线程中处理消息.

Android中关于Handler Looper理解

在Android中每个应用的UI线程是被保护的,不能在UI线程中进行耗时的操作,其他的子线程也不能直接进行UI操作. 为了达到这个目的Android设计了handler Looper这个系统框架. 首先讲解在主线程中使用Handler时源码跟踪过程. 正常在activity的oncreate函数中定义个handler,这种情况下就是默认的主线程的handler,并去复写该类的handleMessage()函数. private final Handler mMessageHandler = ne