Nickcheng.LOG

做自己喜欢的事情, 养活自己, 养活家人

Jun 10, 2014

Xcode 5 编译自动增加版本号

为了让自己的应用显得更专业, 我决定把项目的 Build 号整成自动增加的. 为了免除我的操心, 我就让他在我每次编译的时候把 Build 号加一. 就好像这个样子.

Build Number

设置方法很容易. 先在项目的 "Build Phases" 里添加一项.

Step 1

选择添加 "Run Script"

Step 2

然后你可以在红框位置把名字给改了. 不过这不重要, 重要的是橙框里的内容!

Step 3

脚本如下:

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

基本原理就是把你原本的 "Build" 里那个数取出来然后加一再放回去. 对了, 你原本的 Build 里如果是 "1.0" 要改为 "1", 不然会报脚本错误的.

最后一点要注意的就是这个新添加项的位置. 上图可以看到, 我是放在 "Link Binary..." 和 "Copy Bundle..." 中间的.

到这里你就可以试试编译, 看看效果了.

Apr 20, 2014

Apple TV 2 OS v6.1 使用自定义 DNS

一直想把家里的 Apple TV2 重新启用给老婆看视频. 之前搞的时候一直没有找到合适的 DNS 地址, 今天偶然在 ip.cn 看到几个, 于是打算来试试看.

Apple TV DNS 服务器 IP 地址:

  • 南方电信: 180.153.225.136
  • 北方联通: 115.28.40.136
  • 香港: 111.68.8.179
  • 国外: 182.16.230.98

一般来说, 按照上面设置好 Apple TV 的 DNS 以后, 返回主界面打开 "预告片", 就能看到 DNS 提供的内容了. 但是我却看到的是 "预告片不可用" 的提示字样.

网上搜了一圈, 原来是苹果全面启用了 HTTPS 的缘故导致. 现在需要先利用苹果的配置工具来给 Apple TV 刷个配置, 然后才能使用.

我在网上找到了教程和对应的文件, 有需要的可以自取, 按教程操作即可:

参考链接:

Oct 20, 2013

在 Xcode 5 下让你的应用在不同状态(debug, release)有不同的图标

应用在发布到 App Store 之前, 大家都会把应用通过 Ad Hoc 形式发给内部人员进行小范围的测试, 我们把应用的这个状态称为 Staging. 这些人员大多都没有参与过应用, 目的是用来模拟真实用户的操作行为和流程, 以此来找到一些更不容易发现的 Bug.

前段时间我们在准备发布 NextDay 4.0 的时候, 也是这样. 但问题也随之而来了. 大家的 iPhone 上都装有 App Store 版本的 NextDay, 内部测试的 Ad Hoc 版本装上去以后, 图标与名字都和正式版一样, 很难区分. 而我自己的手机上还有 Debug 版本的应用, 这一下就三个了.

所以我就花时间找了一些方法来让不同版本 (不是版本号, 是 Debug, Staging, AppStore 这样的版本) 的同一个应用有各自不同的 Icon 和名字. 这样就避免了上面碰到的问题. 在这里记录一下, 一个是自己备忘, 另外还可以分享给大家:)

准备工作

首先, 不同版本的应用要有不同的 Bundle ID. 这里推荐 Simon Wolf 的命名方式. 如果你的应用原来的 Bundle ID 是 com.mycompany.myapp, 那么这几个版本你可以这么命名:

  • com.mycompany.myapp.debug Debug (Alpha) 版本
  • com.mycompany.myapp.adhoc Staging (Ad Hoc, Beta) 版本
  • com.mycompany.myapp App Store (Production) 版本

然后对应的 Provisionng Profile 也都要准备好. 不用我说了吧.

接下来准备几个不同的图标. 我是用 Curtis Herbert 修改的 PSD 文件 做的. 效果可以看我的截图.

NextDay in different version

原始 PSD 来自 appicontemplate.com. 使用方法也在原网站.

设置

接下来就是一步一步的设置了.

Build Configurations

首先是添加 Configurations, 位置见下图所示. 项目之前已经有了 Debug 和 Release 两个配置, 可以分别对应咱们的 Debug 版本和 App Store 版本. 所以咱们只添加一个 Staging 版本就可以了. 我为了能让添加的版本按字母序排列在 Debug 和 Release 中间, 用的名字是 "ForBeta".

这步完成后, 你会在 Build Settings 里看到所有的设置都有了三个子选项, 分别对应三个不同的 Configuration.

Schemes

然后, 我们在项目里需要有两个 Scheme. 这两个 Scheme 在 Debug 时候的行为是一样的, 但在 Archive 的时候, 一个用于 Staging 版本发布内部测试, 一个用于 App Store 发布.

Scheme 的设置入口在菜单上: "Product" -> "Scheme" -> "Manage Schemes". 我的两个 Scheme 命名如图:

对应 App Store 的 Scheme 设置里, Run 和 Test 的 Build Configuration 都使用 Debug, Profile 和 Archive 使用 Release.

对应 Staging (Beta) 的 Scheme 设置里, Run 和 Test 也用 Debug, Profile 和 Archive 使用 ForBeta.

有了这里的设置, 咱们就可以通过切换 Scheme 来 Archive 出分别用于 Ad Hoc 发布和 App Store 发布的 App 了.

App Icon

接着就是 Icon. 现在大家应该都用 Xcode 5 了吧! 既然用了, 那就多用用新功能, Icon 设置这块我使用了 Media Assets. 如果你的老项目还没有启用, 那就麻烦你在对应 Target 的 General 下启用一下.

在 Media Assets 中 (在项目中的默认名字应该是 Images.xcassets), 点击菜单 "Editor" -> "New App Icon", 建立两个新的 App Icon, 分别对应 Debug 和 Staging 版本. 然后把之前准备好的图标分别拖进去. 如图:

设置好 Media Assets 后, 还要在对应 Target 的 Build Settings 里分别设置不同版本使用不同的 App Icon. 如图:

这样设置好, 不同版本的应用就拥有了各自不同的图标了.

Bundle ID

再下来就是按照我们前面定义的 Bundle ID 和各个版本的对应关系来进行设置了.

我们需要在 Build Settings 中定义一个变量. 入口在: "Editor" -> "Add Build Setting" -> "Add User-Defined Setting".

然后在对应 Target 的 Info 里把 Bundle ID 设置为我们刚才定义的变量.

这样, 项目在使用不同的配置文件编译的时候就能分别利用不同的 Bundle ID 了.

App Name

设置了图标, 如果觉得有必要把应用名称也顺便区分一下的话, 也是可以的.

我们需要在 Build Settings 中再定义一个变量. 比如我是这么定义的:

然后在应用名称的设置那里使用这个变量:

经过上面的一系列设置, 我现在在 Xcode 里只需要在左上角简单切换一下 Scheme 就可以很方便的编译出各个我需要的应用版本. 妈妈再也不用担心我发布应用了!

参考

Apr 23, 2013

揭露流氓-"快用苹果助手"

作为一名 iOS Developer, 既然知道了 "快用苹果助手" 的流氓行为, 那么就有必要揭露一下, 让他暴露在阳光下!

简单白话一下, "快用苹果助手" 就是利用非法手段跳过了苹果的 iTunes 把应用装到了你的 iPhone 上. 初期他会给你些"甜头", 把一些付费的应用免费装到你的手机上; 以后会干什么那就不好说了. 希望不会装些垃圾软件, 广告软件, 窃听软件, 偷偷盗用你支付宝… 谁知道呢~~~

前两天 36kr 发了篇揭露"快用"流氓行径的文章, 不过这两天就看不到了, Google 上能搜到, 不过点过去就直接 404 了. 希望 36kr 不是被公关了…

image

image

还好能找到些快照, 我贴一下:

“快用苹果助手”是如何实现不越狱即可安装正版APP的?

最近一款名为"快用苹果助手"的苹果 PC 套件在行业内引起了较大讨论。除了可以将 iOS 设备连接电脑瞬间变身 U 盘外,快用最大的特点在于可帮助非越狱 iOS 设备安装正版付费应用,一度网友被称为"iPhone 神器"。

有关快用的运行原理也在知乎上引起了大家的讨论。知乎上的一位 APP 开发者朱棋圣也正因为自己的应用"围棋之眼"曾经被"快用苹果助手"收录过,因此从技术上跟踪了快用的整个流程,了解到其盗版原理并且拍下视频作为证据。据朱棋圣分析:

快用先采用企业级 (Enterprise) 开发者证书重新签名要盗版应用的 IPA,然后通过 Apple 的 itms 协议分发应用(见How to Distribute your iOS Apps Over the Air,这样可以通过 Web 浏览器直接下载应用)。最后,解决闪退是通过同步购买者信息 (也就是原来购买的正版签名文件)。

简而言之,就是"快用苹果助手"采用了自己去 APP Store 上购买的权限,然后通过技术手段分享给普通用户,这一技术此前曾在国外流行过一阵。据知乎网友高笑楠透露,目前快用已在铺设自己的服务硬件在机场、商场等地,相当于一个硬件版的 App Store。而快用官方也正在和开发者合作签订授权,希望成为继 iTunes Store 之外的另一大应用平台。

目前快用已经收录了超过 10 万款应用的授权。有开发者表示,将授权分享给其他用户,虽然方便了用户但却给开发者带来了毁灭性的打击,甚至有可能将 iOS 的生态圈变成 Android 那样开放,但同样的混乱。

文章来自36氪

快照来源: http://cn.ibtimes.com/articles/26756/20130422/jailbreak.htm?utm_source=cnibtimes&utm_medium=twitter

相关的讨论在知乎上也有展开: iOS 开发者对「快用苹果助手」这款软件怎么评价? 文中也有提到具体的技术实现.

按理说, 这种灰色的技术, 一经披露就没有壁垒可言了. 你夹着尾巴闷头挣个灰色收入得了, 但可能人家急于变现, 反而很高调, 还和别人吵架呢~~~

image

图片来源: https://twitter.com/hanmo93/status/325196664375758850

底气很足啊~~~ 当然, 有后台老大的!

image

网页地址: http://www.btdonghe.gov.cn/Html/PuTongXinWen/2012-5/4/20120504152247494.html

来源: https://twitter.com/Ratoo/status/325660911555723264

注解一下, 这个"北京悠然天地科技有限公司"就是经营"快用苹果助手"的公司. 看起来是背后有人撑腰, 还来忽悠政府. 可怜政府为了税收背了这个黑锅啊~~~

最近国外的媒体也盯上他们了, 丢人已经丢出国了! Team Of Chinese Hackers Launches Pirated 'App Store' For iOS

Apr 23, 2013

AFNetworking 更新导致的 bug

昨天调试 NCMusicEngine 的时候发现了一个 bug. 调试了半天才发现是引用的 AFNetworking 模块新版本的更新引入的一个新功能导致的.

之前在 AFNetworking 里 cancel 掉一个 operation 是没有其他额外的影响的, 但是新版本里, operation 的 cancel 操作会导致 CompletionBlockWithSuccess 的 failure. Error Code 是 -999.

所以在更新了 AFNetworking 后, 如果之前的代码里有对 operation 的 cancel 操作, 那就要注意这一点了.

Github 上这个新功能的 pull request: https://github.com/AFNetworking/AFNetworking/pull/693

Feb 5, 2013

Little or Mini Printer ?

之前一直名声大振的 Little Printer 终于开卖了, 不过这价格可真是~~~ £199, 英镑啊, 我买个正儿八经的打印机好不好? 不过话虽这么说, 但是还是抵不住新玩意的诱惑, 是吧? 那咱就光看看 Review 吧, 然后…

Little Printer review: a design nerd fantasy

然后… 就想办法曲线救国呗~~~

其实 KickStarter 上也有一个类似的项目: mPrinter - An analog printer for a digital world

价格便宜一些. 可惜 $100 的早鸟卖没了, 只有 $125 的了, 不过那也比 £199 便宜是吧! 而且还有配套网站和 API: mPrinter

还嫌贵是吧? 那咱就别玩成品了, 自己老老实实攒吧! 而且还能体验 DIY 乐趣. 这儿就有一个简单的热感收据打印机模块: Mini Thermal Receipt Printer

看看这价格, 给力吧?! 不到 $50. 而且买多了还能便宜到 $39.96. 然后自己弄个板子一连, 想怎么搞怎么搞!

Oct 14, 2012

Twitter Weekly Updates for 2012-10-14

  • @jacob_bubu 过了这点儿,网站就不让用了 #
  • 想了一个 Node 的练手项目, 嘿嘿~~~ #
  • iPhone 5 预约还只能朝九晚五... #
  • [Nickcheng.LOG] Twitter Weekly Updates for 2012-10-07: 刚花了1刀买了六个 Mac 应用,...Read moreRelated posts:Twitter Weekly... http://t.co/eaPcqqfQ #
Oct 7, 2012

Twitter Weekly Updates for 2012-10-07

Sep 30, 2012

Twitter Weekly Updates for 2012-09-30

  • 刚出境,还没来得及出去买iPhone5就又要入境了 (at @hkg) [pic] — http://t.co/h4gpdNic #
  • 这家真不怎么样,东西一点都不好吃。可怜我没看到对面的Costa (with becky at Lei Cafe 北京机场T3航站楼) [pic] — http://t.co/pOw3E7AI #
  • 嘴角要烂, 赶紧VB泡腾片伺候! #
  • 微信输入框的蓝牙键盘 Bug 还是没有改啊. #
  • 我的目的就是一个人独占十兆带宽! #
  • 早饭没落了…… (at NEXT.EXPERIENCES.Interactive) [pic] — http://t.co/lGri5oDp #
  • [Nickcheng.LOG] Twitter Weekly Updates for 2012-09-23: I'm at Sanya Phoenix International Airport...Read moreRel... http://t.co/vjncTZ0I #
Sep 23, 2012

Twitter Weekly Updates for 2012-09-23