[转]自制可更新MAC版国服魔兽世界

        无论是黑苹果还是白苹果,mac下病毒比窗口少这是不争的事实。5.2马上来临,你的mac准备好了吗?还在为mac下客户端每次升级担心?还在windows下更新而后拷贝到mac下?希望一个一劳永逸的法子?那么你最好看下。

 

       特别提示,有异议请勿看,可能《X-Only》Huan.Zuo大大发布的补丁更适合您。

 

不废话了,直接开始。

(本人系统为OSX Mountain Lion 10.8.2,经测试10.7以上均可使用。)

工具/原料

  • 原理

    1、全球版本大统一

    2、更新和登陆目前是Config.wft文件控制

  • 台服或者美服安装包

    美服安装包下载地址

    下载页面 https://us.battle.net/account/download/

    安装包 http://dist.blizzard.com/downloads/wow-installers/full/World-of-Warcraft-Setup-enUS.zip

    台服安装包下载地址

    下载页面 https://tw.battle.net/account/download/

    安装包 http://dist.blizzard.com/downloads/wow-installers/full/World-of-Warcraft-Setup-zhTW.zip

    (不放心的自己登陆战网台服美服的主页,找下载页面还是很容易的。)

全新安装

  1. 下载完成后解压到任意位置,点击开始安装。安装开始需要输入一次密码。

    3801213fb80e7bece631fac42e2eb9389b506b28
  2. 点击INSTALL开始安装。

    fcfaaf51f3deb48f49ba58fbf11f3a292cf578c0
  3. 这个过程和windows下区别不大,反而和mac下的dmg安装直接拖放直想要的文件夹不同。选择语言就不用了,除非你想安装西班牙语或者葡萄牙语。选好保存位置,滚动条拉到最下方,点击AGREE,开始安装。

     

    然后就是开始漫长的等待了,本人是8M网速下载速度1MB/s的左右,大概用了6个小时。基本上是满速。这个过程很让人难熬,后面也给出已有完整客户端另外的方法。  //其实这一步不需要等待,新版本的登陆器是可以边下边玩的,所以等到运行按钮变成红色可点就可以关掉启动器进行下一步了。

    a50f4bfbfbedab642571b5e5f636afc379311e97
  4. 安装完成后不要着急进入游戏,进入游戏安装文件夹中找到Data文件夹,新建一个名为zhCN的空文件夹,如果有英文语音需求可以多增加一个enCN的文件夹。

    4e4a20a4462309f7fe335537730e0cf3d7cad6b3
  5. 运行World of Warcraft Launcher.app。这时候客户端会开始更新,依旧是漫长的更新,不过这次会比上次情况好很多。

     

    等待更新完成,关闭更新器。 再次进入游戏安装文件夹中找到WTF文件夹,找到Config.wft文件。

    cefc1e178a82b9017ffa3b16728da9773912ef44
  6. 使用文本编辑器打开。找到以下内容

     

    SET locale “enUS”

    SETinstallLocale “enUS”

    SETportal “us”

     

    locale 此项为为你要使用的语系,选项有:

    zhCN(简体中文)、enCN(简体中文-英文语音)、enUS(美国英文)、zhTW(繁体中文)、enTW(繁体中文英文语音)

     

    portal 此项为你要登录的服务器,选项有:

    cn(大陆)、tw(台服)、us(美服)

     

    修改 SET portal “us”为 SET portal”cn”,没有的话直接添加就可以。

     

    SETlocale “enUS”可以不修改,这个可以在客户端设置中修改设置。在这里直接修改为 希望的语系语音例如: SET locale”zhCN”。如果没有安装相应的语言语音文件,尽量不要选择,否则运行World of Warcraft Launcher.app或者Worldof Warcraft-64.app后会自行下载语音包,造成程序假死但是实际在后台下载的假象。

    编辑完成后保存文件。

     

    至此,完整的mac客户端已经完成。

  7. 打开World ofWarcraft-64.app,直接开始游戏即可。

    修改界面内容的也可在此更改。

     

    d31b0ef41bd5ad6ed5b19ccf80cb39dbb6fd3c4e
  8. 至于插件,直接下载好整合插件或者自己喜欢的单独插件放置Interface\AddOns下即可直接使用。如果你们习惯了使用插件大脚墨盒等下载器……那就没办法了,能力有限。

    b3119313b07eca80fd3ac2c2902397dda14483dc
  9. 另外关于字体的更改,本人没有解决,只解决了英文字体,解决方式还不完美,暂时不放了,只有求其他大神解决了。

针对已有完整客户端玩家

  1. 如果已经有了完整客户端,再去下载20个多G的客户端有些难办,不过直接使用美服的话肯定是原汁原味未和谐。

    第一步和全新安装区别不大,

    选好保存位置,滚动条拉到最下方,点击AGREE,开始安装。

    6159252dd42a2834b142ce2e5ab5c9ea15cebf2b
  2. 等待片刻文件夹中有了基本的文件(起码有文件夹后)后关闭安装器,将已有的客户端覆盖刚才安装的目录。

    f703738da97739128a0b7e44f9198618367ae2e2
  3. 如果使用的时美服台服客户端,在Data文件夹,新建一个名为zhCN的空文件夹,如果有英文语音需求可以多增加一个enCN的文件夹;如果使用的时国服客户端,什么也不用做。然后继续打开安装器继续安装过程,这时候会发现安装条很快,需要更新的文件很少了。

  4. 完成更新后,此处和全新安装又一致了,进入游戏安装文件夹中找到WTF文件夹,找到Config.wft文件修改。

    修改 SETportal “us”为 SET portal “cn”,没有的话直接添加就可以。

     

    更新问题,可能会因为美服台服更新时间不一致,直接使用Launcher.app登陆可能会使客户端提前更新造成无法登录国服,不过过了更新阶段,国服和美服台服版本全部更新之后就没有问题了。至于担心的国内版本号不一致问题直接忘了吧,这些是TBC和WLK时期的事情了。

     

Mac下删除“打开方式”里面重复的软件列表方法

在Mac系统中,如果一个程序进行了版本更新,那么就会在打开方式中留下两个相同的打开方式。虽然一两次还能忍受,但是时间长了会让列表变得过于庞大。

20090811-ejw6qi74x5r4xmgdfrrtreiafa

要解决这个问题,可以通过把出问题的程序拖到垃圾桶再放回来解决,但是程序一多就不是一个办法了。其实,只要打开terminal(终端),复制粘贴(完整的一行,是一条命令),执行后即可重建列表。

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system-domainuser

限制用户进程CPU和内存占用率的SHELL脚本

限制进程CPU占用率的问题,给出了一个shell脚本代码如下:

renice +10 `ps aux | awk ‘{ if ($3 > 0.8 && id -u $1 > 500) print $2}’`

其中用到ps获取进程信息,其实

ps中%CPU一列的意义是进程实际占有CPU时间和它存活时间的比值,这个值能反应进程对CPU的消耗,但不能准确反应进程所占CPU时间占整个系统CPU的百分比。

而top输出中的%CPU这一列正是进程所占CPU时间占整个系统CPU的百分比,用于限制进程CPU占用率更加合理,同时%MEM一列还反应了进程占用内存的百分比,可以用于限制进程内存占用率。

shell脚本代码如下:

#!/bin/sh

PIDS=`top -bn 1 | grep “^ *[1-9]” | awk ‘{ if($9 > 50 || $10 > 25 && id -u $2 > 500) print $1}’`

for PID in $PIDS

do

renice +10 $PID

echo “renice +10 $PID”

done

可以将这个脚本放到cron中运行,比如每分钟检查一次,只需以root身份添加crontab项:

#crontab -e

* * * * * limit.sh

以后每个一分钟就会检查一次,调整占用50%以上CPU或25%内存的进程的nice值,从而使这样的进程优先级变低,被调度的机会减少,同时会向root发邮件提示该进程被调整过。

不过,限制内存使用最好还是用PAM,RedHat可以在/etc/security/limits.conf中设置。

ffmpeg进行视频文件转换的笔记

   1、进行图像大小的转换
    下面的语句将CIF大小的视频转换为QCIF的:
    ffmpeg -s cif -i waterfall_cif.yuv -s cif waterfall_qcif.yuv
    2、进行帧速率的转换
    下面的语句将帧速率为25的视频转换为帧速率为5的视频
    ffmpeg -s qcif -r 25 -i foreman_qcif.yuv -s qcif -r 5 foreman_qcif5.yuv
    3、将H.264文件转换为AVI格式
    如果直接使用下面的语句进行文件格式转换:
    ffmpeg -i foreman_qcif.264 foreman_qcif5.avi
转换后的文件将采用MPEG4编码的,在没有安装解码器的机器上是播放不了的。要想变成不压缩的AVI文件,需要使用下面的语句:
    ffmpeg -i foreman_qcif.264 -vcodec rawvideo foreman_qcif5.avi
这样的文件就可以在任何机器上播放了。当然文件有点大。如果用huffyuv替换rawvideo,就是采用无损压缩的AVI格式,不过这种压缩的AVI不是在所有机器上都可以播放的。
4.将比较特殊的UYVY格式的YUV文件转换成无损压缩的avi格式
UYUV格式是一种比较特殊的YUV422格式,在一般情况下不是很常用,但是在监控视频的拍摄中会经常用到。包括三星在内的诸多高端监控摄像机的SDK都只支持直接输出为UYVY格式的视频。为了处理这种格式的视频,我们可以用ffmpeg做如下转换

ffmpeg -s 1280×1024 -f rawvideo -pix_fmt uyvy422 -i input.yuv -vcodec huffyuv output.avi

其中-vcodec huffyuv表示使用无损压缩的方式转换,如果替换成-vcodec rawvideo则会产生无任何压缩的avi视频文件。

[警告] 苹果apple id密码重置漏洞

更新:有人说该漏洞已经修复,但是刚刚我用自己的ID又测试了一下发现这个漏洞依然存在!

今天一个朋友的苹果帐号密码被修改,iMac、iPad、iPhone上的所有资料都被抹除,iMac被锁定无法登陆,几百GB的资料瞬间化为乌有,怀疑是同行恶意行为。悲剧详情可到v2ex的这个帖子凭吊。

根据提示这个帖子描述漏洞详情的两个连接 国外版 国内版 里提到的方法,我用自己的apple id和新注册的apple id验证,的确存在

重置密码过程异常简单(使用chrome):

1. 登录https://iforgot.apple.com/iForgot/iForgot.html,填写指定的apple id,点击下一步
2. 选择验证方法—— 回答安全提示问题,点击下一步
3. 填写apple id注册时填写的出生日期,先不提交
4. 打开开发者工具,在elements处搜索”security”字样(某个hidden的input的value),改成null
5. 提交,进入密码重置页面,输入新密码,重置完成。

因此强烈建议立即修改自己apple id的生日

修改流程:

1. 打开 https://appleid.apple.com ,登陆
2. 点击左边的“帐户和密码安全”
3. 填写安全提示问题的答案,并点击继续
4. 在新页面里修改生日。

应该朋友要求已将操作视频录像,有兴趣的可以在 优酷 观看,或者从 百度网盘、 微云 下载,瞧瞧看看苹果的服务有多么不堪。

Xcode 4.1~4.6 + iOS 5、iOS 6免证书(iDP)开发+真机调试+生成IPA全攻略

开发环境使用的是目前为止最新的稳定版软件:Mac OS X Lion 10.7 + Xcode 4.1

目前Xcode 4.2 Preview版也已经发布,据说其修改方法跟4.1非常类似,只改动了一行代码,请参看参考文章的第二篇。本文仍以4.1版本为例。
更新:现在Xcode 4.2正式版和iOS 5均已发布,下面补充上4.2的修改方法。(2011-10-24)
各步骤会标明版本,比如(Xcode4.1请执行)和(Xcode4.2请执行),4.2.1的修改方法与4.2完全相同
未标明的步骤为两个版本均需执行的步骤!
更新:现在Xcode 4.3已发布,修改方法类似,Xcode 4.3的修改步骤将以(Xcode4.3请执行)标出(2012-2-7)
更新:现在Xcode 4.3.2和iOS 5.1.1完美越狱均已发布,本文及时进行了更新。修改方法类似,Xcode 4.3.2的修改步骤将以(Xcode4.3.2请执行)标出(2012-5-28)
更新:Mountain Lion + Xcode 4.4已发布,本人尚未安装,但在评论中看到已经有朋友测试成功,这里祝贺这些朋友!(2012年8月5日)
更新:Xcode 4.5 for Mountain Lion已发布。本人已经更新并亲测破解成功。Xcode 4.5将原来XML格式的plist文件变成了二进制格式,故修改方法略有不同,具体操作已在文中给出,请各位朋友测试!(2012年10月2日更新)
 
2012年2月7日更新:
目前本人已经测试并证实有效的平台有
Xcode 4.1:
iPod touch 4 iOS 4.3.3
 
Xcode 4.2:
iPod touch 4 iOS 4.3.3
iPod touch 4 iOS 5.0
iPod touch 4 iOS 5.0.1
 
Xcode 4.2.1:
iPod touch 4 iOS 4.3.3
iPod touch 4 iOS 5.0.1
iPhone 4S iOS 5.0.1(5A406)
 
Xcode 4.3(2012年2月7日更新)
iPhone 4S iOS 5.0.1(5A406)
 
Xcode 4.3.2(2012年5月28日更新)
iPhone 4S iOS 5.1.1
 
Xcode 4.4.1 for Mountain Lion(2012年9月26日更新)
iPhone 4S iOS 5.1.1
 
Xcode 4.5 for Mountain Lion(2012年10月2日更新)
iPhone 4S iOS 5.1.1
 
Xcode 4.6 for Mountain Lion(2013年2月12日更新)
iPhone 4S iOS 6.1
 
另外,操作系统的版本貌似对调试影响不大,这期间用过的系统有Mac OS X 10.6~10.8.2,都没有问题。
 
当然您需要先越狱您的设备并通过Cydia安装AppSync

本文参考了多篇文章,综合其中的方法,并修正其中的错误,整理而成。
未经许可,请勿转载。本文首次发表于http://kqwd.blog.163.com/
参考的文章有:
http://laolang.cn/back-end-develop/helloworld-iphone-developer.html
http://ccmos.tw/blog/2011/06/30/xcode4-port-program-to-idevice-without-idp/
http://www.cnblogs.com/flyingzl/articles/2207717.html
众所周知,在Xcode上开发的程序只能在模拟器中运行,如果要放到真机上则要花费99美金购买开发者证书iDP。这严重阻碍了我等草根开发者探索的脚步。写个小程序,同学间分享一下这个小小的愿望都不能满足,自然不能善罢甘休。
在没有iDP的情况下,要想将程序放到iPhone上调试,并最终发布IPA用于分享,需要以下几个步骤:
1.自己为自己颁发一个证书用于为生成的程序签名
2.修改工程配置以及Xcode的配置文件和二进制文件以阻止其验证和签名
3.通过自定义生成步骤,用伪造的证书为应用程序签名
4.使用一点小trick来生成IPA文件
1.创建证书
创建证书的过程比较简单,打开实用工具-钥匙串访问。然后在菜单栏里点击钥匙串访问-证书助理-创建证书来打开向导。第一个步骤比较重要,必须要把名称命名为iPhone Developer,将类型设定为代码签名,将”让我覆盖这些默认值”选中。之后的步骤无需更改,一路点击“确定”和“继续”来完成这个向导就可以。
1295629317816035869
2.修改Xcode的配置文件和二进制文件
下面的步骤稍微有点繁琐,您应该了解UNIX命令行的基本操作,并了解一种命令行文本编辑器,本文使用的是vim。尽管这里会给出完整的代码,但是关于修改和保存代码的基本操作,不再赘述。下面的操作请先将Xcode按Command+Q完全关闭
(1)修改配置文件
进入目录并备份原文件(4.1、4.2、4.3在这里主要的差别是SDK的目录名不同)
(Xcode4.1请执行)cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/
(Xcode4.2请执行)cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/
(Xcode4.3请执行)cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk
(Xcode4.3.2请执行)cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
(Xcode4.5请执行)cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk
(Xcode4.6请执行)cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk
 
sudo cp SDKSettings.plist SDKSettings.plist.orig
进行编辑(除了Xcode 4.5之外的版本,包括Xcode 4.6)
sudo vim SDKSettings.plist
将以下两段中的YES改为NO
CODE_SIGNING_REQUIRED
YES
ENTITLEMENTS_REQUIRED
YES
Xcode 4.5的plist格式不是XML,而是改为了Apple自己的二进制格式,我们使用Xcode本身来编辑这个plist文件,命令是
sudo /Applications/Xcode.app/Contents/MacOS/Xcode ./SDKSettings.plist
会启动Xcode的图形界面,我们展开DefaultProperties分支,将下面的CODE_SIGNING_REQUIREDENTITLEMENTS_REQUIRED两个属性改为NO
下面修改另外一个文件
进入目录并备份原文件
(Xcode4.1/4.2请执行)cd /Developer/Platforms/iPhoneOS.platform/
(Xcode4.3/4.4/4.5/4.6请执行)cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
 
备份
sudo cp Info.plist Info.plist.orig
 
编辑文件
(Xcode4.1/4.2/4.3/4.4请执行)sudo vim Info.plist
将全部的XCiPhoneOSCodeSignContext 修改成 XCCodeSignContext,网上的大部分文章说有2处,但我找到了3处,可能是Xcode 4.1要多一处?(Xcode 4.2/4.3/4.3.2也有三处)总之都改掉了。提示:在在vim中输入/要搜索的内容来搜索,按n键是搜索下一处。
(Xcode 4.5/4.6)编辑命令如下
sudo /Applications/Xcode.app/Contents/MacOS/Xcode /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist
Xcode 4.5、4.6也有三处,分别在DefaultProperties分支下、RuntimeRequirements分支下和OverrideProperties分支下。
(2)二进制补丁
#在桌面上建立script这个脚本
cd ~/Desktop
vim script
#(Xcode 4.1执行)在编辑器中输入如下内容
#!/bin/bash
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
printf “xc3x26x00x00” >> working
/bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
/bin/mv working iPhoneOS\ Build\ System\ Support
chmod a+x iPhoneOS\ Build\ System\ Support
#(Xcode 4.2执行)在编辑器中输入如下内容
#!/bin/bash
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/PrivatePlugIns/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
printf “xc3x26x00x00” >> working
/bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
/bin/mv working iPhoneOS\ Build\ System\ Support
chmod a+x iPhoneOS\ Build\ System\ Support
保存并退出。(4.1和4.2在这里的区别也是目录名不同,就是代码中绿色的部分。4.1是Plug-ins而4.2是PrivatePlugIns
授予这个脚本执行权限并执行它
chmod 777 script
./script
正常的话应该输出(具体的数字可能有差别)
231+1 records in
231+1 records out
115904 bytes transferred in 0.001738 secs (66694555 bytes/sec)
#(Xcode 4.3注意)在Xcode 4.3版本中,我没有找到iPhoneOS Build System Support.xcplugin这个插件,因此我跳过了这个步骤,并且最终也成功的进行了联机调试。因此我个人认为Xcode 4.3没有必要执行“二进制补丁”这一步骤。请各位朋友测试~!
#(Xcode 4.3.2/4.4/4.5/4.6注意)在Xcode 4.3.2版本中,我们可以找到iPhoneOS Build System Support.xcplugin,但我没有修改它,仍然可以进行联机调试。这个修改步骤是从Xcode 3.X中继承过来的,我们有理由猜测,在Xcode 4.x版本中,已经不需要修改这个文件了。(2012年5月28日更新)
 
至此,对SDK中配置文件和二进制文件的修改就完成了
3.准备自定义的生成后脚本
连接互联网后执行
#(Xcode 4.1/4.2执行)
mkdir /Developer/iphoneentitlements401
cd /Developer/iphoneentitlements401
curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
mv gen_entitlements.txt gen_entitlements.py
chmod 777 gen_entitlements.py
 
#(Xcode 4.3/4.4/4.5/4.6执行)
mkdir /Applications/Xcode.app/Contents/Developer/iphoneentitlements
cd /Applications/Xcode.app/Contents/Developer/iphoneentitlements
curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
mv gen_entitlements.txt gen_entitlements.py
chmod 777 gen_entitlements.py
 
热心网友Ringo_D指出,这里可能涉及到权限问题。我做的时候貌似没有出啥问题,如果您在执行这段代码时遇到Permission denied提示的话,请将相应的语句前面加上sudo以获取超级权限。(2012年6月15日更新)
如果您已经联网,则请直接转到步骤4,如果您没有联网,那么请在相应目录手动创建gen_entitlements.py并授予其执行权限,这个文件的内容为
#!/usr/bin/env python
 
import sys
import struct
 
if len(sys.argv) != 3:
print “Usage: %s appname dest_file.xcent” % sys.argv[0]
sys.exit(-1)
 
APPNAME = sys.argv[1]
DEST = sys.argv[2]
 
if not DEST.endswith(‘.xml’) and not DEST.endswith(‘.xcent’):
print “Dest must be .xml (for ldid) or .xcent (for codesign)”
sys.exit(-1)
 
entitlements = “””
    application-identifier
    %s
    get-task-allow
   
“”” % APPNAME
 
f = open(DEST,’w’)
if DEST.endswith(‘.xcent’):
f.write(“\xfa\xde\x71\x71”)
f.write(struct.pack(‘>L’, len(entitlements) + 8))
f.write(entitlements)
f.close()
4.修改工程设置
特别注意:本阶段之前的修改配置文件、准备脚本等,只需要做一次。但本阶段的操作,对每个需要真机调试的工程都要做一遍。
这个步骤的主要作用是支持真机调试,如果不做这个步骤,仍然可以通过步骤5来生成ipa在真机上运行,但是无法使用Xcode内置的调试器对在真机上运行的程序进行单步跟踪。如果您的程序在点击Run真机调试时秒退,请检查此步骤是否正确完成。

(1)禁用Xcode自动的签名操作

将工程配置中所有的Code Signing选项全部设为Don’t Code Sign,如图。可能需要先点击“All”让这个选项显示出来
2529052665762129796
(2)添加自定义的生成后脚本
在Build Phases中添加一个Phase,右下角的Add Build Phase,然后单击Add Run Script,输入以下脚本
(对于Xcode 4.1/4.2)
export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
if [ “${PLATFORM_NAME}” == “iphoneos” ] || [ “${PLATFORM_NAME}” == “ipados” ]; then
/Developer/iphoneentitlements401/gen_entitlements.py “my.company.${PROJECT_NAME}” “${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent”;
codesign -f -s “iPhone Developer” –entitlements “${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent” “${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/”
fi
(对于Xcode 4.3/4.4/4.5/4.6)
export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
if [ “${PLATFORM_NAME}” == “iphoneos” ] || [ “${PLATFORM_NAME}” == “ipados” ]; then
/Applications/Xcode.app/Contents/Developer/iphoneentitlements/gen_entitlements.py “my.company.${PROJECT_NAME}” “${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent”;
codesign -f -s “iPhone Developer” –entitlements “${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent” “${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/”
fi
 
如图所示:
672162244401931959
至此配置全部完成,下面就可以插上iPhone,重新选择生成目标来测试一下在线调试了!如果是第一次使用该设备调试,请先在Organizer中将设备切换为开发模式,具体操作请见常见问题5。
5.旁门左道生成IPA文件
如果我的程序调试好了,怎么才能发给别人用呢?正常情况下IPA文件是从Xcode的Organizer中输出的,但是我们没有证书,这样输出会产生错误。我们只能用个小trick来完成这个操作了。
先将代码生成为Release目标,然后打开工程的输出文件夹,通常情况下这个目录是
/Users/你的用户名/Library/Developer/Xcode/DerivedData/以工程名打头的文件夹/Build/Products/Release-iphoneos
很纠结吧~这个目录下有个.app的文件,就是生成的程序了。把这个.app拖到iTunes中,它会出现在应用程序那个列表中,然后再把它从iTunes的那个列表中拖出来(比如拖到桌面),发生了什么?哈哈,它就这样变成.ipa了!
把这个.ipa发给朋友,大家就可以跟您一起分享这个程序了。
文章发表以来点击量已经超过了5000次,也收到了不少热心博友的反馈和疑问。现加以整理,列为常见问题。感谢大家的关注!(2011年12月2日)
常见问题:
不成功的先看这里!!本文点击量超过6000,无数网友亲测成功,如果您失败了基本可以确定是您没有严格按照文中的方法操作,下面列出常见问题,切望各位朋友提问前先看看!!(2011年12月14日)
 
1. 我是初学者,请问什么是权限?执行权限(x权限)是什么意思?什么是脚本?如何加执行权限?sudo是什么命令?vim是什么,如何在vim中保存更改?你说的目录我没找到怎么办?我有些步骤没看明白,能不能加QQ交流?
解答:首先感谢您关注我的博客。这里要提醒各位初学者朋友,Xcode提供了非常完善的模拟器调试环境,模拟器调试要比真机调试方便得多,也简单得多,使用模拟器调试程序是iOS开发的常态。真机调试通常是在产品快要完工时才进行的,看一下程序在实际机器上的视觉效果等等。还有依赖于加速度计的程序要测试一下加速度计的程序有没有问题。所以初学者并不需要一开始就进行真机调试。初学者配置真机调试的主要目的可能并非学习技术,而是满足好奇心、追求成就感甚至是为了向朋友炫耀等等。而这些目的并不值得您花费这么大的精力来阅读本文。
因此本文是给有一定基础的朋友看的,各种命令是免不了的。UNIX中的基本命令比如cp,mv,cd,chmod,sudo啥的还有vim编辑器,如果您都没听说过,强烈建议您不要尝试本文提到的修改。一旦改错了轻则Xcode挂掉,重则系统崩溃。如果遇到解决不了的问题欢迎留言询问,务必给出详细的错误信息,否则无法判断。博主恕不解答类似于如何执行脚本代码,如何赋予执行权限,如何使用vim编辑器(如何保存)等与iOS开发无关的UNIX基础问题。博主非常乐意以文会友,结识有思想、有创意、有技术的大牛。博主也会不定时到博客上对热心网友提出的问题进行简单的解答。但并没有充足的时间通过QQ对文中的步骤进行手把手的解释和指导。这里先向有这种需求的朋友说声抱歉了!
 
2. 各种错误,错误信息中包含“No such file or directory”这句话
解答:错误信息的含义非常清楚,就是“没有这个文件或者目录”。这类错误通常是由于您拷贝代码时不全或者开发环境安装错误等问题导致的。请再次检查报错的目录是否存在,检查代码与本文给出的是否严格一致,各种检查吧~总之是低级错误
 
3. 联机调试时程序秒退,或者无法安装到设备,或者任何时候报错,错误信息中包含“code signing”、“CERT”、“signature”或者“certificate”字样的(最常见的错误!!)
解答:证书错误或者签名错误,这种问题就不要问了,肯定是因为您没有严格文中的步骤做。提醒您检查的地方有(1)有没有设置为Don’t Code signing (2)生成后事件的代码是否已经正确粘贴 (3)那个Python脚本是否已经成功执行 (4)设备是否已经越狱并安装AppSync (5)第一步的iPhone Developer证书是否已经正确创建
其中最可能出问题的就是生成后事件代码(文中的那个Run Script)没有正确执行。可能是您忘记了添加Run Script并粘贴那段代码,也可能是您没复制全,或者复制到了啥特殊字符导致执行出错。查看那个script的执行结果的方法是在Xcode左侧的侧边栏里,点最靠右的一个标签(Show the Log navigator),看最近的一个Build日志(不是Debug日志),找到一行Run custom shell script “Run Script”那一行,正常情况下那一行跟其他行一样,是不能展开的。如果那一行左边有个小箭头,点击后能展开的话,说明执行出错,展开后的信息即为出错的信息。请认真查看错误信息并修正脚本中的错误。如果Build日志里根本没有Run custom shell script “Run Script”,那说明您忘记添加Build script了。。。(2012年2月9日更新)
补充:Run Script经常报的一条错误是“replacing existing signature”。。。这个提示的意思是“替换已有的签名”,出现这个提示的原因是,你并没有成功的阻止Xcode使用默认的方法为应用程序签名。因为这个破解的原理就是阻止Xcode为app签名,而用script中的自定义过程手动为app签名。当script为app签名时,发现app已经被Xcode签名过了,就会报这个错误。出这个错误后提醒您检查的地方有两个(1)SDKSettings.plist中需要修改的地方是否已经正确修改 (2)工程设置里是否将那5个签名的选项全部设为Don’t Code signing (2012年6月15日更新)
 
4. iPad能用吗?
解答:我没有iPad,所以没法准确回答。但从热心博友的回复来看,iPad无疑是可以用的。
如果要用ipad 需要把第四步脚本文件里的 platform_name == iphones 换成platform_name == ipads 不然会报错的~ (感谢博友xyishao的建议)
感谢qingcheng89提出的改进意见,现在来看上述代码可以直接支持iPad而无需修改,请各位朋友测试。(2012年2月9日更新)
 
5. 为什么我的Build for Archiving选项是灰色的?
解答:是因为您没有把设备插到电脑上。虽然这个问题挺蠢的,但我曾经也有过这个疑问,哈哈~~ 
经热心网友xc7296815提醒,设备未开启开发模式也会导致Build for Archiving不可用。开启开发模式的方法是:插上设备,点Xcode右上角的Organizer图标,选中您的设备,看一下设备名称左侧的小灯是什么颜色的。若是灰色代表未开启开发模式。此时在右边窗口中点击“Use for Development” 即可。若是黄色请重新插拔设备,若是绿色代表设备已经开启开发模式(2011年12月25日)
关于启用开发模式的补充:点击Use for Development后,会要求输入Apple ID,这里点击取消即可。这时启用设备开发模式的进程会立即终止。设备名称旁边应该有一个黄灯。此时重新插拔设备,Organizer中会出现一个进度条,等这个进度条跑完,小灯就会变成绿色,开发模式已经启用。(2012年5月28日更新)
再补充:最近经常有人提问说,无论怎么搞,Organizer中的灯始终是黄色的。这种情况几乎可以百分之百的确定是您的Xcode版本不够高。如果您的设备是iOS 5.1.1,则必须使用Xcode 4.3.2或以上版本。同样的道理,iOS 5.0.1对应Xcode 4.3.1,iOS 5.0对应Xcode 4.3……(2012年6与5日更新)
 
6.我的iOS版本/Xcode版与你的不同,能用吗?
解答:本人测试过的环境和设备已经在文章开头给出。其他环境我没有测试过,也没有条件测试,因此当您的环境与我的不同时,别问我可不可用,您可以试一下,然后把结果告诉我,也为其他的网友提供方便,在此先谢谢您了!
 
7.真机调试时出现Error launching remote program: failed to get the task for process xxx错误(2012年1月26日更新)
解答:我在调试中貌似没有遇到过这个问题,但是不少网友指出会有这个问题,谁来告诉我什么情况下会出这个问题呢?如果您遇到了这个问题,请阅读Apple官方的帮助文档http://developer.apple.com/library/ios/#qa/qa1710/_index.html
2012年2月1日更新:有网友指出该错误是由于权限设置错误导致的。由于我使用了跟报错的那位网友完全相同的环境,而在操作过程中并没有遇到这个错误,所以基本可以确定是您没有按步骤操作造成的,请您再次检查整个过程,尤其是热心网友提出的下载脚本并修改执行权限的部分。
经本人测试,如果该错误出现在编译运行之后,且现象为设备上的程序闪退,则是由于签名错误导致的,这是由于您没有严格按照上述步骤来做导致的,请参考常见问题3.(2012年2月9日更新)
文章好长…欢迎各路大侠指正。

Chrome下强制http重定向到https的方法

使用Google的https搜索的时候,我们会发现搜索结果虽然可以显示,但是有时候结果的链接却无法打开。这里的原因是因为Google的https的搜索结果链接往往使用的是http的方式打开,因此有时候会无法访问,本文将介绍在Chrome下解决这个问题的方法。

如果你使用的是Chrome浏览器,只需要经过一些简单的设置,就可以强制Google的https搜索结果链接也使用https的方式打开。

打开Chrome,在地址栏输入chrome://net-internals/

之后,在HSTS选项卡下的Domain中输入 www.google.com (或 www.google.com.hk ),然后点击Add按钮。

3270_2

现在你再使用Google的Https搜索,就会发现搜索结果的链接可以打开了。

如果想针对别的网站启用强制HTTPS,只需要将域名添加进去就可以了。

Anyview A盘管理地址

前段时间Anyview把Android和iPhone端的阅读器都加上了A盘的功能。但是比较讨厌的是官方并没有公布A盘的在线管理地址。

通过找回查看找回密码链接的方式我找到了A盘的管理地址,特在此放出,方便大家。

http://apanr.net/

此网站只能用Chrome等高端浏览器打开。某些山寨浏览器能看到文件列表但是无法上传。有了这个,大家以后传书就方便啦~~~

PS:貌似A盘最大上传10M。。。

VS2010+Opencv-2.4.0的配置攻略

摘要:在VS2010环境中应用Opencv,网上找到了很多配置方法,但大多都是老版本的,很多新手面对最新版本的Opencv无从下手,就给新手童鞋写了这么一篇超级详细的配置攻略,贴上来共享。要强调一点的就是,这种配置方法里使用的Opencv库是直接安装Opencv时候自带的dll库,在你的VS里面是无法调试Opencv的。如果需要调试Opencv,必须应用自己编译出来的Opencv库,具体怎么编译自己的Opencv库,网上有很多例子,再此不再赘述。

1、下载软件

下载OpenCV-2.4.0,双击解压到%opencv%(凡是出现%opencv%的地方均替换为你自己opencv的路径全名,如D:\program\opencv)。

下载VS2010,安装。

 2、配置OpenCV环境变量

计算机->(右键)属性->高级系统设置->高级(标签)->环境变量->(双击)path(用户,系统里面的path任选其一)->在变量值里面添加” %opencv%\build\x86\vc10\bin”和”%opencv%\build\common\tbb\ia32\vc10”(里面的%opencv%记得换成自己的opencv路径。例如我的:D:\program\ifly\bin;D:\Program Files (x86)\opencv\build\x86\vc10\bin;D:\Program Files (x86)\opencv\build\common\tbb\ia32\vc10)。

2012042521370765

3、配置工程的opencv依赖(每次新建工程都要重新配置,要执行此步骤请先跳到第4步建立工程)

1)、项目(菜单项)->…属性->VC++目录:需要配置“包含目录”和“库目录”两项。

2012042521403569

2)、配置“包含目录”项:添加行”%opencv%\build\include”即可。

但在运行别人的opencv项目时,可能别人直接引用了上述目录的子目录路径,如果出现include错误,则再添加”%opencv%\build\include\opencv”和(或)”%opencv%\build\include\opencv2”,即可解决问题。

2012042521411894

3)、配置“库目录”项:添加行”%opencv%\build\x86\vc10\lib”即可。

2012042521415632

4)、配置连接器:项目(菜单项)->…属性->连接器->输入->附加依赖项

针对debug配置添加以下库:

opencv_calib3d240d.lib

opencv_contrib240d.lib

opencv_core240d.lib

opencv_features2d240d.lib

opencv_flann240d.lib

opencv_gpu240d.lib

opencv_highgui240d.lib

opencv_imgproc240d.lib

opencv_legacy240d.lib

opencv_ml240d.lib

opencv_objdetect240d.lib

opencv_ts240d.lib

opencv_video240d.lib

如果是release配置(以后再说,只需要添加上面的debug配置就行了现在),则添加:

opencv_calib3d240.lib

opencv_contrib240.lib

opencv_core240.lib

opencv_features2d240.lib

opencv_flann240.lib

opencv_gpu240.lib

opencv_highgui240.lib

opencv_imgproc240.lib

opencv_legacy240.lib

opencv_ml240.lib

opencv_objdetect240.lib

opencv_ts240.lib

opencv_video240.lib

2012042521423828

4、用VS2010新建控制台工程测试:

1)、文件->新建->项目->Visual C++->Win32 控制台应用程序(输入名称test)

2012042521442467

2)、确定->下一步->附加选项选“空项目”->完成

2012042521460556

3)、解决方案资源管理器->源文件(右键)->添加->新建项

2012042521533454

4)、Visual C++->C++文件:输入名称test点添加

2012042521545853

5)、粘贴下面的代码,保存

 1 #include 
 2 #include 
 3 #include 
 4 using namespace cv;
 5 using namespace std;
 6 int main()
 7 {
 8     Mat img = imread("pp.jpg");
 9     if(img.empty())
10     {
11         cout<<"error";
12         return -1;
13     }
14     imshow("xx的靓照",img);
15     waitKey();
16 
17     return 0;
18 }

6)、把自己的靓照改名为pp.jpg,然后放到工程项目的test文件夹里面(是里面那个test文件夹)

2012042521584579

7)、按照第3步骤的方法配置工程的opencv依赖。

8)、按F5,如果你的图片出来了就OK了。

2012042617492156

Linux VPS备份网站数据到Dropbox

之前本来想用FTP来进行备份数据的,但是都没有什么长期的FTP服务器,于是就想了用网盘来备份网站的数据。

国外的网盘推荐就是使用Dropbox,信誉不错的,做了基本任务就2G多的空间,可以自己刷好友来扩大容量!

于是乎,在网上搜了搜,转载过来和大家分享!

 

准备工作

如果没有Dropbox的用户可以使用后面的推荐码进行注册,http://db.tt/yV9WSxh ,不遮遮掩掩,就是推广链接!你好我好嘛~

注册完后,前往Apps点击Create an app,需要验证邮箱(不必多说了吧),填好基本信息,在Access的选项中选择Full Dropbox

Snip20130129_1

如上图所示!

第二步就是下载Dropbox-Uploader,下载地址:https://github.com/andreafabrizi/Dropbox-Uploader

下载之后,上传至/root/目录下,不建议改名字!

 

开始配置

chmod +x dropbox_uploader.sh #赋予权限
./dropbox_uploader.sh info #开始绑定APP

这里他会让你输入App key以及App secret,在刚刚我们创造的APP那里有!

然后他会询问你是App folder 还是Full Dropbox,按照刚刚我们上面的说明,按f,然后回车!

然后他会给出一个地址,自己复制下来用IE打开,其实就是授权给这个APP!

授权好了,回到SSH上,按下回车。

如果不出意外的话,我们就配置好了,可以用下面的代码测试!

./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old

回显DONE就说明配置成功了!

 

关键代码

#!/bin/bash
DROPBOX_DIR="/backup/$(date +%Y-%m-%d)" #Dropbox上的备份目录
MYSQL_USER="root" #数据库帐号
MYSQL_PASS="123456" #数据库密码
YM_DATA=/etc/nginx #nginx配置目录
BACK_DATA=/home/backup #本地备份文件存放目录,手动创建
DATA=/home/www #网站数据存放目录

#定义数据库的名字和旧数据库的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz
YMName=YM_$(date +%Y%m%d).tar.gz
OldData=Data_$(date -d -6day +"%Y%m%d").tar.gz
OldWeb=Web_$(date -d -6day +"%Y%m%d").tar.gz
OldYM=YM_$(date -d -6day +"%Y%m%d").tar.gz

#定义Dropbox旧数据的名字(30天前)
Old_DROPBOX_DIR=/backup/$(date -d -30day +%Y-%m-%d) #Dropbox上的备份目录

#删除本地6天前的数据
rm -rf $BACK_DATA/$OldData $BACK_DATA/$OldWeb $BACK_DATA/$OldYM

cd $BACK_DATA

#使用命令导出SQL数据库,并且按数据库分个压缩
for db in `mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
    (mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz)
done
#压缩数据库文件合并为一个压缩文件
tar zcf $BACK_DATA/$DataBakName $BACK_DATA/*.sql.gz
rm -rf $BACK_DATA/*.sql.gz

#压缩网站数据
cd $DATA
tar zcf $BACK_DATA/$WebBakName ./*

#压缩域名配置数据
cd $YM_DATA
tar zcf $BACK_DATA/$YMName ./*

cd ~
#开始上传
./dropbox_uploader.sh upload $BACK_DATA/$DataBakName $DROPBOX_DIR/$DataBakName
./dropbox_uploader.sh upload $BACK_DATA/$WebBakName $DROPBOX_DIR/$WebBakName
./dropbox_uploader.sh upload $BACK_DATA/$YMName $DROPBOX_DIR/$YMName

#开始删除远程30天前的文件
./dropbox_uploader.sh delete $Old_DROPBOX_DIR/

echo -e "Thank you! all down"

按照说明自己配置一下,如果需要定时备份的请麻烦自己设置!

还需要赋予脚本运行的权限

chmod +x backup.sh #赋予权限

注意:/home/backup/这个目录需要自己创建,不然会报错!

运行的时候就输入下面的代码即可!

./backup.sh

最后

没有最后了,当你做完

你也可以按照自己的需要设置,不需要的功能自己#了他就可以了!

祝你一路顺利!我的vps就是一路顺利过来了~