iOSのAuto Layout Visual Formatでセンタリングを行う

iOSのAuto LayoutでVisual Formatを使ってサブビューのセンタリングを行うには以下のように記述する。

1
2
[superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[superview]-(<=0)-[subview(length)]" options:NSLayoutFormatAlignAllCenterY metrics:NSDictionaryOfVariableBindings(length) views:NSDictionaryOfVariableBindings(superview, subview)]];
[superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[superview]-(<=0)-[subview(length)]" options:NSLayoutFormatAlignAllCenterX metrics:NSDictionaryOfVariableBindings(length) views:NSDictionaryOfVariableBindings(superview, subview)]];

上記コードではlengthを指定して正方形にレイアウトしているが、他で長さを指定していればlengthは指定しなくてもいい。

iOSでフィードバックを送信するUIライブラリ「CTFeedback」を公開

iOSでフィードバックをメールで送信するライブラリ「CTFeedback」を作成・公開しました。iOS6.0以降で、MITライセンスです。

AAMFeedbackが更新されないので、似たようなのを自作しました。

1
2
3
CTFeedbackViewController *feedbackViewController = [CTFeedbackViewController controllerWithTopics:CTFeedbackViewController.defaultTopics localizedTopics:CTFeedbackViewController.defaultLocalizedTopics];
feedbackViewController.toRecipients = @[@"ctfeedback@example.com"];
[self.navigationController pushViewController:feedbackViewController animated:YES];

上記のコードで

CTFeedback

このような画面が表示されます。

独自のUINavigationControllerに載せてモーダルに表示しても利用することが可能です。

メールボタンをタップすると、入力した情報と基本情報が入力されているメール作成画面が表示されます。

トピックは独自に作成することが可能です。

CocoaPodsにもPull Requestを送っていますが、現状でもpodspecを提供しているのでPodfileで直接指定すればCocoaPodsでインストールすることができます。

iOS7でのUITableViewの背景色

iOS7ではUITableViewの背景色を変更してもCellの背景色は白のままになる。
Appleのドキュメントによると

UITableViewCell Class Reference: “Whether you use a predefined or custom cell, you can change the cell’s background using the backgroundView property or by changing the inherited backgroundColor property. In iOS 7, cells have a white background by default; in earlier versions of iOS, cells inherit the background color of the enclosing table view. If you want to change the background color of a cell, do so in the tableView:willDisplayCell:forRowAtIndexPath: method of your table view delegate.”

ということで、iOS7ではセルの背景色は白がデフォルトということなので、tableView:willDisplayCell:forRowAtIndexPath:メソッドでセルの背景色を変更してやることになる。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = [UIColor lightGrayColor];
}

iOSのバージョンチェック用マクロ

iOSでバージョンのチェックをいろいろ行いたかったので、便利なマクロを探してみた。Check iPhone iOS Version – Stack Overflowから。これを.pchファイルに記述すると便利。

/*
 *  System Versioning Preprocessor Macros
 */ 
 
#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
 
/*
 *  Usage
 */ 
 
if (SYSTEM_VERSION_LESS_THAN(@'4.0')) {
    ...
}
 
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@'3.1.1')) {
    ...
}

MacにMongoDBをインストール

MacにHomebrewでMongoDBをインストールした。

$ brew install mongodb
$ ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

ScalaでAndroidアプリを作成する準備

ScalaでAndroidアプリを作成するために準備をする。

HomebrewでScala/sbt/giter8をインストール。

$ brew install scala sbt giter8

giter8でテンプレートからファイルを作成。

$ g8 jberkel/android-app
package [my.android.project]: com.example.myproject
name [My Android Project]: My Project
main_activity [MainActivity]:
scala_version [2.9.2]:
api_level [10]: 14
useProguard [true]:
scalatest_version [1.8]:

みたいな感じで。

さらにIntelliJ IDEAのプロジェクトにする。

project/plugins.sbtに

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.4.0")

を追加。addSbtPluginを複数記述する場合はaddSbtPlugin行間に空白行が必要。

$ sbt
> gen-idea
を実行。

> android:package-debug
> android:install-device

でビルドして実機に転送。

AndroidアプリをMacから実機(Xperia Z)に転送

Mac Android開発環境構築。実機転送設定(Xperia Z) – develog.meを参考に行った。

USBドライバの設定の作成

HomebrewでSDKをインストールしたのでmanifest.iniを
/usr/local/opt/android-skd/add-ons/xperia-z/manifest.ini
として以下の内容で作成。

# SDK Add-on Manifest
name=Sony Xperia z
vendor=Sony
description=Adds USB support for Xperia Z(Vendor id:0x054c)
api=16
revision=1
usb-vendor=0x054c

manifest.iniに関しては[Android] adb_usb.ini の正しい書き方 | tande lab.が詳しい。

USBドライバ設定の更新

$ android update adb
$ adb kill-server
$ adb start-server

実機の設定

「設定→セキュリティ→提供元不明のアプリ」をONに設定
「設定→開発者向けオプション→USBデバッグ」をONに設定
とし、実機をMacに接続。

確認

$ adb devices
で確認。

実機に転送

IntelliJ IDEAを利用している。IntelliJ IDEAからデバッグを実行。

MacにAndroid SDKのインストール

Android SDKをMacにインストールした。

すでにJavaがインストールされているとする。

$ brew install android-sdk

とHomebrewでインストール。

.bashrc等に

export ANDROID_SDK_ROOT=/usr/local/opt/android-sdk

を記述。

続いて

$ android &

とAndroid SDK Managerを起動して必要なパッケージを選択してインストール。