pxl格式的iphone程序包,可以直接通过91手机助手安装到真机,很方便,介绍一下制作方法。
1. 新建一个目录 $appname
2. 在$appname目录下,新建文件夹 PkgScript和文件PxlPkg.plist
3. 将包XXX.app文件夹内容复制到$appname目录下,我一般连上真机,winscp下载 (/var/mobile/applications下)
4. 步骤2中的PxlPkg.plist 文件格式见附录。
5. chmod -R 755 * 后再 zip ../weibolu.pxl -r ./*
修改$appname目录下所有文件的属性,并打zip包 。(这一步在mac下做,或者在windows的cygwin下做)
6. 完毕。如果装了91 iphone助手,双击pxl包就能安装
附录: PxlPkg.plist 文件格式
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd“[]>
<plist version=”1.0″>
<dict>
<key>CFBundleIdentifier</key>
<string>Reweibo.Weibolu</string>
<key>RDPxlPackageFiles</key>
<array>
<dict>
<key>destination</key>
<string>/Applications/weibolu.app</string>
<key>overwrite</key>
<true />
<key>permanent</key>
<false />
<key>source</key>
<string>weibolu.app</string>
</dict>
</array>
<key>RDPxlPackagePostflight</key>
<array>
<array>
<string>chown</string>
<string>-R</string>
<string>root</string>
<string>/Applications/weibolu.app</string>
</array>
<array>
<string>chmod</string>
<string>-R</string>
<string>775</string>
<string>/Applications/weibolu.app</string>
</array>
</array>
<key>RDPxlPackageDesc</key>
<string>微波炉</string>
<key>RDPxlPackageFormat</key>
<string>1</string>
<key>RDPxlPackageName</key>
<string>Weibolu</string>
<key>RDPxlPackageVersion</key>
<string>0.1</string>
<key>RDPxlPackageIcon</key>
<string>weibolu.app/icon.png</string>
<key>RDPxlPackageFireware</key>
<string>3.0,3.1</string>
</dict>
</plist>
Posted in
未分类 at 10月 12th, 2009.
No Comments.
1. 新建一个目录 $appname
2. 新建文件夹 Payload和文件iTunesArtwork (注意大小写,iTunesArtwork由图标文件改名得到)
3. 包XXX.app文件夹内容放到Payload下,我一般连上真机,winscp下载 (/var/mobile/applications下)
4. 修改XXX.app下的Info.plist,现在的Info.plist一般都是二进制文件了。可以用专门的工具(叫做pledit)修改。其实自己建一个文本格式的文件也能正常工作。格式见附录。
5. 将$appname里的内容,用winrar压缩,选择zip格式,后缀名直接改为.ipa即可。
6. 可以用iTunes同步到真机了。注意真机必须做一下同步非appstore ipa的破解。
附:Info.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></key>
<string></string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>Weibolu</string>
<key>CFBundleExecutable</key>
<string>Weibolu</string>
<key>CFBundleIdentifier</key>
<string>com.yourcompany.Weibolu</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Weibolu</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleResourceSpecification</key>
<string>ResourceRules.plist</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0.1</string>
<key>DTPlatformName</key>
<string>iphoneos</string>
<key>DTSDKName</key>
<string>iphoneos2.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>MinimumOSVersion</key>
<string>2.0</string>
<key>NSMainNibFile</key>
<string>MainWindow</string>
<key>SignerIdentity</key>
<string>Apple iPhone OS Application Signing</string>
</dict>
</plist>
别的不太重要,粗体部分的是<key>SignerIdentity</key>
<string>Apple iPhone OS Application Signing</string>必须的。
Posted in
未分类 at 10月 12th, 2009.
1 Comment.
碰到文件路径比较深的,在terminal里要使用能急死人。这个方法不用装任何程序,简单实用。
mac osx 下,快速复制文件路径的方法。1. 将文本编辑(Text Editor)设置为纯文本模式。 2. 将文件或者文件夹,拖到文本编辑器里,即可。
Posted in
未分类 at 10月 10th, 2009.
2 Comments.
iphone开发中,在头文件的interface声明里,可以用@property (nonatomic,retain) NSString *blog;来声明一个属性,在objc 1.0里,需要自己写getter setter 方法,在现在的objc2.0里已经简化了。只要在.m文件中头部 @synthesize blog;即可生成blog属性的 getter和setter方法。
一般情况下,属性里的对象变量,在对象释放之前都要保留至少一个得retain Count,否则,不一定什么时候使用属性的时候,属性对象已经被释放了,就出错了。如果,没有使用@synthesize生成setter方法,而是自己对属性赋值,这时候,一般都要对属性对象[obj retain]以后再赋值。(针对通过with初始化的;通过init初始化并autorelease的一样)。
还有一点非常重要,使用中注意,比如上面的类:
如果这样对blog属性赋值,
Blog *iu1ublog = [[Blog alloc] init];
blog = iu1ublog;
[iu1ublog release];
在真正需要blog属性时,会发现blog属性的对象已经被释放了。因为 blog = iu1ublog这一步并没有ratain这个对象的引用计数。
必须用 self.blog = iu1ublog,才说明是对属性赋值,对象才会retain. 直接blog = iu1ublog,是对内部成员变量赋值,不是对属性赋值。
Posted in
未分类 at 10月 9th, 2009.
1 Comment.
Google Wave这两天比较热,求的人很多。Google Wave这个词在twitter和新浪微博上都成了热门话题词了。早上微博上一个朋友找我要邀请,找了好一会儿才找到当时的账号。当时是sandbox账号,现在是正式google wave了。里面有一条让我激活的Wave,激活以后,感觉内容比sandbox稍微好一点了。可是还是玩不起来,可能现在人太少吧。带了8个提名资格,没发现邀请资格,所以又需要提名的,可以跟我要。
说说对google wave的简单看法,感觉本质上其实和twitter,微博还是很类似的,不过,做的更细化了一点。可以发普通wave,添加了相关widget以后,可以发视频等等。比twitter线索化一点,一条wave可以很长。过几天人多了,玩玩在评价吧。
Posted in
未分类 at 10月 2nd, 2009.
23 Comments.
这也是个iPhone开发初学者常犯的错误。原因是声明属性的时候,没有一个配套的私有属性。
@property (nonatomic,retain) IBOutlet XXX *xxx;
在类里如果不给他指定对应的私有属性,即使给属性赋值了,也无法保存,就会产生这个错误。
synthesized property ‘xxx’ must either be named the same as a compatible ivar or must explicitly name an ivar
不过这个错误在加入@synthesize xxx;以后才会出现。因为@synthesize会帮你生成一个getter和setter方法。
Posted in
未分类 at 09月 15th, 2009.
1 Comment.
excel小技巧:
要求:创建一个下拉框,让使用者可以从中选择一个预设的值。
步骤:选中一个单元格,菜单【数据】【有效性】,在设置TAB页,允许里面选“序列”,来源里面,写下各个预设值,中间用半角逗号分隔开。如”苹果,西瓜”,点击确定即可!
Posted in
未分类 at 08月 12th, 2009.
No Comments.
没事看看开源的项目,也能有些收获。比如有些模块几乎是所有项目都要用到的,如反SQL注入处理等。
今天看EasyTalk的源码,这是他们的处理方式,可以参考一下
//addslashes() 函数在指定的预定义字符前添加反斜杠
function daddslashes($string) {
$string=str_replace(”‘”,’”‘,$string);
!defined(’MAGIC_QUOTES_GPC’) && define(’MAGIC_QUOTES_GPC’, get_magic_quotes_gpc());
if(!MAGIC_QUOTES_GPC) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = daddslashes($val);
}
} else {
$string = addslashes($string);
}
}
return $string;
}
其实就是addslashes转义’ 引号。此外,htmlspecialchar经常被用来防止用户输入恶意script脚本
Posted in
未分类 at 07月 15th, 2009.
No Comments.
一般ubuntu server在安装的时候,都会在ui中让你输入vip地址和网关dns等信息。
一般搬迁服务器的时候,都会重新配置服务器的ip信息。那么,在shell下怎么修改呢。今天,正好给宠物导航搬迁服务器,顺便整理记录一下。
打开/etc/network/interfaces,如果没有配置过ip,比如安装过程中跳过,则会看到
auth lo
iface lo inet loopback
如果,已经配置过,会看到类似如下的eth0 或 eth1配置
#from iu1u.com
auth eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.254
dns-nameservers 202.106.0.20
修改其中的信息为自己的,修改dns还要同时修改/etc/resolv.conf文件里面的dns地址。
然后重启机器,或者执行命令sudo /etc/init.d/networking restart,刷新网络接口信息即可。
Posted in
未分类 at 04月 27th, 2009.
1 Comment.