使用CocoaPods时开启inhibit_warnings参数的小问题

inhibit_warnings参数能够有效的抑制CocoaPods引入的第三方代码库产生的warning,但是有时候会产生意想不到的错误,例如我今天引入ReactiveCocoa的时候就产生了下面的错误:

CompileDTraceScript ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalProvider.d
    cd /Users/Tony/Code/TestApp/Pods
    setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/Users/Tony/.rvm/gems/ruby-1.9.3-p194/bin:/Users/Tony/.rvm/gems/ruby-1.9.3-p194@global/bin:/Users/Tony/.rvm/rubies/ruby-1.9.3-p194/bin:/Users/Tony/.rvm/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/heroku/bin:/usr/local/git/bin:/usr/local/share/npm/bin:/Applications/MAMP/Library/bin:/Users/Tony/Applications/play:/Users/Tony/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/Applications/Server.app/Contents/ServerRoot/usr/bin:/Applications/Server.app/Contents/ServerRoot/usr/sbin:/usr/local/git/bin:/usr/local/sbin:/Users/Tony/.rvm/bin:/Users/Tony/.ec2/bin"
    /usr/sbin/dtrace -h -DOS_OBJECT_USE_OBJC=0 -fobjc-arc -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -s ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoa/RACSignalProvider.d -o /Users/Tony/Library/Developer/Xcode/DerivedData/TestApp-bfkcwbnhjkdedddkxicxplyvlnxq/Build/Intermediates/Pods.build/Debug-iphonesimulator/Pods-ReactiveCocoa.build/DerivedSources/RACSignalProvider.h

......

Command /usr/sbin/dtrace failed with exit code 2


而我的pod文件中引入方式如下:


pod 'ReactiveCocoa', '~> 2.1', :inhibit_warnings => true

在这里,关闭了inhibit_warnings之后,就可以正常编译了。同理,inhibit_all_warnings也会产生类似的问题。

所以,要开启这个参数,需要谨慎,不要因为一些小小洁癖耽误自己大量的时间。

iBeacons

iBeacons是iOS7的新增的功能,可用于室内近场定位。iOS设备可以检测到附近的iBeacons兼容设备,在当前版本中甚至可以在应用后台运行的情况下获得回调。

iBeacons设备往往都是低功耗的,用Bluetooth Low Energy低功耗蓝牙实现,设计良好的iBeacons设备在一节CR2032纽扣电池支持下应能支持一年以上的使用时间。

iBeacons还有一个有用的特性是可以距离感应,当你的iOS设备检测到了一个iBeacons设备,那么app即可通过CoreLocation监测设备的距离,通过回调的形式通知距离变化。

i

常见应用场景

可以有不少有趣的应用场景,随便列举一些。

  • 商场购物时,靠近某些商品时,提示用户正在打折,或者查看商品的具体信息以及评价。靠近交费区域时,使用某一信用卡支付可以获得优惠。
  • 室内导航,例如机场登机口指示
  • 各种大会入场checkin,免去繁琐的签到流程
  • 各种展览场所,当用户靠近某些展品时,就可以获得相应的介绍信息

什么时候应该使用iBeacons

  • 同时需要检测多个区域
  • 被检测区域可以是一个移动的区域,例如汽车,列车。。
  • 检测区域范围有限的情况(一般不会大于100m)
  • 每个区域需要一些标识做区分的情况
  • 每个区域可以在室内,同一建筑物内,可以有重合
  • 用户愿意开启低功耗蓝牙来检测区域

如何把iOS设备变成一个iBeacon

所有支持低功耗蓝牙技术的iOS设备都可以变成一个iBeacon设备,被其它iOS设备检测到。例如iPhone 4s, iPod Touch5, iPad3及之后的设备,都支持低功耗蓝牙技术。

定义你的iBeacon

首先需要了解4个属性

  • proximity UUID , 是一个iBeacon或一组iBeacons设备的唯一标识,标明它的类型,你可以用osx下的 uuidgen
    命令生成
  • 一个内部identifier ,你在app中自定义的标识
  • 一个 major identifier, 可用于区分一组拥有相同proximity UUID的设备
  • 一个 minor identifier, 可用于区分一组拥有相同proximity UUID和相同major identifier的设备

创建并广播一个iBeacon区域

首先需要定义一个CLBeaconRegion来实现iBeacon,如下

NSUUID *myProximityUUID = [[NSUUID alloc]
    initWithUUIDString:@"566C5595-6EC7-4F08-909F-C954BDCA6CD3"];
NSNumber *branchNumber = @42;
NSNumber *tillNumber = @3;
CLBeaconRegion *region = [[CLBeaconRegion alloc]
    initWithProximityUUID:myProximityUUID
    major:[branchNumber unsignedShortValue]
    minor:[tillNumber unsignedShortValue]
    identifier:@"com.mycompany.store"];

然后把这些信息交由CBPeripheralManager进行广播


NSDictionary *peripheralData =
    [region peripheralDataWithMeasuredPower:nil];
CBPeripheralManager *myPeripheralManager =
    [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
[myPeripheralManager startAdvertising:peripheralData];

于是一个iOS设备就变成了一个iBeacon了

兼容的iBeacon设备

目前Apple并未公布iBeacons的具体技术细节,但是仍然有不少第三方通过蓝牙嗅探工具反向工程实现了iBeacons兼容设备。在国外已经有一些成品上市,例如

  • estimote
  • sticknfind
  • paypal,它甚至将iBeacons融入了它的支付技术

本人也利用TI公司的CC2541实现了一个简单的iBeacons兼容模块,为了未来可能的变化,做了预留的空中升级接口,现在某宝尝试性的对外出售,适用于有一定电子技术动手能力的爱好者测试。

参考链接

使用xctool自动打包,测试xcode项目

xctool是facebook开源的一个命令行工具,用来替代苹果的xcodebuild工具。

功能如下:

  • 像xcode一样跑测试用例
  • 结构化输出编译测试结果
  • 彩色且方便阅读的编译内容输出

示例截图:

xctool

如何安装xctool

最简单的办法是通过homebrew安装xctool

brew update
brew install xctool

搞定

如何使用xctool

打包


path/to/xctool.sh 
  -workspace YourWorkspace.xcworkspace 
  -scheme YourScheme 
  archive

build

path/to/xctool.sh 
  -workspace YourWorkspace.xcworkspace 
  -scheme YourScheme 
  build

测试

path/to/xctool.sh 
  -workspace YourWorkspace.xcworkspace 
  -scheme YourScheme 
  test

使用CocoaPods之后的头文件包含问题

使用了一段时间CocoaPods来管理Objective-c的类库,方便了不少。但是有一个小问题,当我在xcode输入import关键字的时候,没有自动联想补齐代码的功能,需要手工敲全了文件名,难以适应。

在stackoverflow上找到了解决办法:

Go to the Target > \”Build Settings\” tab and find the \”User Header Search Paths\” setting.

Set this to \”$(BUILT_PRODUCTS_DIR)\” and check the \”Recursive\” check box.

Now the built target will search the workspace’s shared build directory to locate the linkable header files.

简单说就是这么几步:

  • 选择Target -> Build Settings 菜单,找到\”User Header Search Paths\”设置项
  • 新增一个值$(BUILT_PRODUCTS_DIR),并且选择\”Recursive\”,这样xcode就会在项目目录中递归搜索文件

自动补齐功能马上就好使了。

MarkNote 1.0.2

MarkNote 1.0.2可以下载了。这个版本以Bug修复为主,改动如下:

  • 添加了撤销和重作功能.
  • 添加了部分retina高清图标,为了The new iPad.
  • 预览界面里的链接现在是在内置的safari打开,避免点击链接之后无法预览
  • 修复竖持时>按钮无法被按到的问题

下一个版本会做稍大的改动,计划内的改动如下:

  • 补齐retina图标以及app的高清图标
  • 支持MultiMarkdown语法,这样就可以画table了
  • 支持编辑时手动上传

猛击App Store下载

MarkNote for iPad 1.0.1

MarkNote 1.0.1在苹果应用商店上架了。这是一个在iPad上使用的Markdown编辑器,如果你喜欢用Markdown来写一些文字的话,那么这个应用可能就是一个不错的选择。

现在限时降价,6块

1.0.1新增的功能:

  • 新增了多个语言支持
  • 新增了全屏预览按钮
  • 在键盘上新增了两个按钮: < 和 >
  • 解决了第一次打开文件时有可能没有预览的问题
  • 解决了Dropbox同步的一个问题

我借到一个支持Air Print的HP打印机测试了打印功能,MarkNote的打印功能工作正常。

图片预览

新增的全屏预览按键在下图的右下方,可惜被某浪的图片水印盖住了。
\"MarkNote\"

iPhone中png图片格式处理

众所周知,iPhone中应用自带的png图片已经是经过压缩处理的,无法直接查看,但是可以通过工具转换为原图。

转换为原图的方法

在安装好Xcode之后(我安装的版本是4.3),可使用命令行转换

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush -revert-iphone-optimizations src.png dst.png

这个命令行太长,不好记,所以我在~/.bash_profile中加入一个alias。

alias pngcrush=\"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush -revert-iphone-optimizations \"

所以之前的命令可以简化为

pngcrush src.png dst.png

批量转换png

用简单的shell就可以批量转换png图片为原图。

for i in `ls *.png`; do pngcrush $i /tmp/$i; mv /tmp/$i $i; done

小说跟踪器 —— 另一款iPhone上的小说阅读,更新提醒应用

不才的另一个iPhone应用 —— 小说跟踪器也已经出现在苹果的应用商店。

小说跟踪器的用途

小说跟踪器可以试阅起点中文网的小说,订阅小说的章节更新通知。因为目前的阅读软件已经多的不得了,所以这款应用没有把阅读功能作为重点来做,只提供了基本的试阅功能。但是你会发现它的 章节更新通知 功能很好用,很及时而且也稳定,最重要的是,还免费

所以,这个应用适用于起点小说的重度书友,跟书不愁。

目前支持的设备有iPhone以及iTouch,在iOS 4.3及以上版本都可以使用。

应用截图

书架
\"书架\"

章节通知
\"章节通知\"

阅读界面
\"阅读\"

网站

MarkNote – iPad上的Markdown文本编辑器

不才用业余时间鼓捣出一个叫MarkNote的iPad应用,用来给geek们编辑Markdown文本。使用方式是左侧编辑,右侧预览生成的HTML,然后接下来可以选择Email或是打印,复制之类。

MarkNote的功能

  • 实时预览
  • 自动保存
  • 多个主题选择,甚至可以做为一个简单的待办事项列表来使用(使用TopMarks主题)
  • 和Dropbox同步
  • 以html格式打印或邮件递送内容
  • 复制内容到其它应用中使用

真相图

\"TopMarks样式\"

\"夜间样式\"

BTW:这个应用苹果的审核人员只用一个小时就通过了,可见是多么简单的一个应用。

干掉xcode 4.2里的performselector警告

xcode 4.2非常可恶,原来的代码里有调用performselector:withObject:的地方无一例外获得一个警告:

Semantic Issue
PerformSelector may cause a leak because its selector is unknown

warning倒是不影响程序运行,但是这人要是有点代码小洁癖的话,那日子就没法过了,这warning怎么看都碍眼。所以必须得想办法把它弄没了:

#pragma clang diagnostic push
#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"
    [self performSelector:nextView];
#pragma clang diagnostic pop

世界清静啦