Posted on 2010-10-27 09:40
乱78糟 阅读(12667)
评论(2) 编辑 收藏 引用 所属分类:
Mac OS X
在windows横行中国的今天,苹果系统(Mac OS X)在国内绝对算是小众,由此导致在MAC平台上做软件开发的更少。开发社区人气不旺,相关资料贫乏。
现在想起这一周闷头折腾PackageMaker的痛苦经历,不禁握拳皱眉
![](http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/face24.gif)
!
废话到此为止。
相关资料:官方文档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取消选中,然后其他配置很多,一一尝试吧。
![](http://www.cppblog.com/images/cppblog_com/smagle/packageMaker1.jpg)
2)选中Debug目录,配置内容,如安装位置,安装完成后的动作,安装前后执行的脚本等等。
如果安装app,且装载系统Volume下,务必保证下图的列表中的Allow Relocation(允许用户选中位置)处于非选中状态,否则安装成功后软件实际没有安装上。
![](http://www.cppblog.com/images/cppblog_com/smagle/packagemaker2.jpg)
第五步、一切文件配置完毕,保存编译,看看安装效果是否满意。
随系统启动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.plistOK,驱动在启动的时候就可以被这个plist调用起来了。
附:
这个工具帮助文档烂到不想提了,使用的时候经常碰到乱起八糟莫名其妙的问题,慢慢一点一点尝试吧。
by smalge :(