大漠落日

while(!dead) study++;
posts - 46, comments - 126, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Xcode打包工具PackageMaker制作安装包

Posted on 2010-10-27 09:40 乱78糟 阅读(12010) 评论(2)  编辑 收藏 引用 所属分类: Mac OS X
在windows横行中国的今天,苹果系统(Mac OS X)在国内绝对算是小众,由此导致在MAC平台上做软件开发的更少。开发社区人气不旺,相关资料贫乏。
现在想起这一周闷头折腾PackageMaker的痛苦经历,不禁握拳皱眉
废话到此为止。

相关资料:
官方文档howTo安装驱动(说了等于没说,我试过N次,没用):http://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptPackaging/packaging_tutorial.html#//apple_ref/doc/uid/20002368-CHDCBCJA
安装驱动需要注意要点:http://serenity.uncc.edu/web/ADC/2005/Developer_DVD_Series/April/ADC%20Reference%20Library/documentation/Darwin/Conceptual/KEXTConcept/articles/loading_kexts.html

任务:安装包需要安装一个app软件和一个kext驱动,驱动需要随系统启动。

操作步骤:
第一步、在/Developer/Applications/Utilities/目录下找到Xcode自带的打包工具PackageMaker.app。
第二步、运行PackageMaker,一般操作按照上面那个howTo连接描述进行,不赘述。
第三步、将app软件拖到左侧列表中,如果软件是中文名,请一定放到一个目录里,例如Debug目录下,然后将Debug目录拖入,否则安装成功后发现并没有安装上。
第四步、配置拖入的文件
1)选中前面有一个蓝色圆点标注的目录,如下图的Debug,如果不想用户选中安装内容,将Configuration标签下的Initial State的Enable取消选中,然后其他配置很多,一一尝试吧。

2)选中Debug目录,配置内容,如安装位置,安装完成后的动作,安装前后执行的脚本等等。
   如果安装app,且装载系统Volume下,务必保证下图的列表中的Allow Relocation(允许用户选中位置)处于非选中状态,否则安装成功后软件实际没有安装上。
  

第五步、一切文件配置完毕,保存编译,看看安装效果是否满意。

随系统启动kext驱动安装注意问题:
驱动放到/System/Library/Extensions/目录下,安装时候选中权限为root:wheel,这个还不够,因为kext目录下的其他文件如Info.plist等权限为775,而该目录下的驱动是不允许group组修改的,所以必须将权限改为755,但是打包工具的复制功能很弱,所以必须写脚本来完成这个功能。
例如脚本叫chmod.sh,内容为:
#!/bin/sh
chmod 755 /System/Library/Extensions/xxxx.kext

然后在驱动的scripts标签下,Postinstall:填入该脚本chmod.sh,意思是驱动安装之后将执行这个脚本。

如果kext驱动能够正常随系统启动,恭喜,你成功了。
如果不能(非常不幸,我碰上了),继续下面的办法。

写一个plist,内如如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<false/>
<key>Label</key>
<string>com.apple.test</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/kextload</string>
<string>/System/Library/Extensions/xxxxx.kext</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>UserName</key>
<string>root</string>
</dict>
</plist>

保存为随便的名字,例如com.xxxx.xxxx.plist,一并拖入PackageMaker中,安装到/System/Library/LaunchDaemons或者/Library/LaunchDaemons/目录下(建议前者),注意权限设置为755。

最后在写一个sh脚本(也可以放到设置驱动权限的那个脚本里,不过脚本需要最后执行),内如如下:
#!/bin/sin
launchctl load -w /System/Library/LaunchDaemons/com.xxxx.xxxx.plist

OK,驱动在启动的时候就可以被这个plist调用起来了。

附:
    这个工具帮助文档烂到不想提了,使用的时候经常碰到乱起八糟莫名其妙的问题,慢慢一点一点尝试吧。
by smalge :(

Feedback

# re: Xcode打包工具PackageMaker制作安装包  回复  更多评论   

2011-04-12 11:16 by vivien
谢谢你的无私分享。安装后的文件夹权限是很难搞呢~~

# re: Xcode打包工具PackageMaker制作安装包  回复  更多评论   

2015-01-12 18:30 by 网络开发者
好文章,顶起来!如需技术支持可以联系我
App无需经过苹果漫长严格审核,直接发布:通过网页或二维码,无需苹果帐号一键下载安装!无需越狱都可安装,无数量限制
免费提供App网页自动下载安装所需服务器!免费自动安装文件配置服务!
苹果和安卓App开发定制,修改编辑破解,苹果开发者帐号证书,极速上线各大市场,上架苹果商店,http://www.hdtht.com,QQ:1256932816

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理