Xcode打包工具PackageMaker制作安装包

在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 :(
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值