Objective-C

CocoaPodsでライブラリを管理する

Objective-Cライブラリ管理ツールCocoaPodsを使い始めたのでインストールメモを書きます。

CocoaPodsインストール

gemでインストールします。

$ sudo gem install cocoapods

CocoaPodsをセットアップします。

$ pod setup
Setting up CocoaPods master repo
Setup completed (read-only access)

pod setupを実行すると~/.cocoapodsディレクトリ内でライブラリの管理を行うようにセットアップをします。

$ ll -a ~/.cocoapods/
total 0
drwxr-xr-x   3 suusuke  staff   102  5 20 10:48 .
drwxr-xr-x+ 51 suusuke  staff  1734  5 20 10:48 ..
drwxr-xr-x   3 suusuke  staff   102  5 20 10:48 repos

CocoaPodsを使ってみる

CocoaPodsSampleというサンプルプロジェクトを作って、AFNetworkingライブラリを使う想定で使ってみます。

サンプルプロジェクトの下に、Podfileという名前で管理するライブラリを記述していきます。
記述方法は、

開発レシピ:Objective-Cのライブラリ管理ツール CocoaPods | iOS開発者@日本.

に詳しく書いてあるので参考にしました。

$ cd ~/iPhone/CocoaPodsSample/
$ vi Podfile
platform :ios, "7.0"
pod 'AFNetworking'

pod installコマンドでライブラリをインストールします。

$ pod install
Analyzing dependencies
Downloading dependencies
Installing AFNetworking (2.2.4)
Generating Pods project
Integrating client project

[!] From now on use `CocoaPodsSample.xcworkspace`.

CocoaPodsSample.xcworkspaceという名前でワークスペースファイルができているので、開くとAFNetworkingライブラリが追加されています。

CocoaPodsSample_—_Podfile

証明書(Certificates)、Provisioning Profiles 更新 – 新しいUI編

iOS Dev Center の Provisioning Portal(今は呼び名が違う!?) の UIが変更になって非常に使いやすく、分かりやすくなったと思います。
今回、CertificateとProvisioning Profileの更新をしたので、備忘録。

・有効期限が切れたProvisioning Profileを選択する。
iOS Provisioning Profiles (Distribution)

Editボタンをクリック
iOS Provisioning Profiles (Distribution)

・有効なCertificateが無いので、Create Certificateをクリック
3

・App Storeリリース用のCertificateを作成したいので、App Store and Ad Hocを選択
_4

continueクリック
_5

・鍵をキーチェーンで作成し、アップロードする
・鍵の作り方はiOS Developer Programの期限内での更新を参照
_6

・Certificateがダウンロードできるようになるので、ダウンロード、ダブルクリックでキーチェーンに登録
_7

Generateボタンをクリックし、Provisioning Profileを作成する
_8

・ダウンロードし、ダブルクリックするとオーガナイザーにProvisioning Profileが登録される。
_9

更新作業は以上で完了。

iOS Developer Enterprise Program の更新

iOS デバイス向けのエンタープライズ App を配信する.

iOS Developer Program 同様 Enterprise版も 年間使用料があり、更新しないと社内用アプリの起動ができなくなるので、更新しました。
更新手順は Developer Program 同様なので、以前備忘録として書いた suusuke – blog – iOS Developer Programの期限内での更新. の通りの手順で問題なく更新出来ます。

ただ、疑問点?

Distribution Certificate の期限が3年後になっている

iOS デバイス向けのエンタープライズ App を配信する.

一年前に Enterprise に申し込んだ際は証明書(Certificate)の期限も1年間だったんだけど。最近変わったんだろうか?
ドキュメントにも、3年間と書いてある。

配信プロビジョニングプロファイルは、発行後 12 カ月で有効期限が切れます。有効期限の 2 カ月前から、iOS デバイスにもうすぐ期限切れになることについて通知が表示されます。有効期限日以降は、App は起動しなくなります。

….

配信証明書の有効期限が切れると、App は起動しなくなります。配信証明書は、発行後 3 年間、またはエンタープライズ・デベロッパ・プログラム・メンバーシップの有効期限まで有効です(どちらか早い方)。証明書が想定より早く期限切れにならないように、メンバーシップの有効期限が切れる前にメンバーシップを更新してください。配信証明書がどのようにチェックされるかについては、証明書の検証を参照してください。

上記のように、配信証明書は3年間有効でも、プロビジョニングプロファイルは12ヶ月なので、アプリも新しいプロビジョニングプロファイルで、作りなおさないと起動しなくなってしまう。
良くなる点としては、配信証明書を更新する手間がなくなる事位なのかな。。。
チームで開発している場合は、証明書渡したりする手間が無くなり良いのか。

追記

Developer Program の更新との細かい違い

上に書いたとおり基本的には同じだったのですが、Provisioning Profileの更新の際にModifyボタンが無いので、削除して新たに作りなおすようになります。
これは、古い証明書で作成した、Enterprise版のアプリを利用不可にするため、そのような仕様になっているかと思われます。
削除すると

Your Certificate Has Been Revoked

というメールが届きます。

アプリをiPhone5に対応した際の備忘録

iPhone5が発売されてから随分時間が経ってますが、この度アプリをiPhone5に対応したのでやったことの備忘録を書きたいと思います。

 

縦幅を568pxに変更する

アプリによって対応する箇所はいろいろ有ると思うのですが、共通するのが縦幅を568pxに変更する事だと思います。対応されてないアプリをiPhone5で起動すると上下に余白ができてしまします。

iPhone5/iOS6で、アプリの縦幅を568pxに変更する方法 – たくあん. に記載されている通りに、568pxのスプラッシュ画像(Default-568h@2x.png)を用意してプロジェクトに追加すればiPhone5で起動した場合に568pxで表示されます。

iPhone5対応のスクリーンショットを用意する

これはApp Storeに表示されるものになりますが、iTunes Connectで申請する際に、4-Inch Retina Display ScreenshotsにiPhone5で表示したスクリーンショットをアップロードすればOKです。

ITunes Connect

iPhone5対応のスクリーンショットについて | KAYAC DESIGNER’S BLOG – デザインやマークアップの話.

その他必要な対応

ポートレート、ランドスケープ両方対応しているアプリなど、アプリによってはその他にも対応が必要みたいです。

アプリをiPhone5に対応する場合の地雷ポイント一覧 | fladdict.

Xcode で 既存アプリのアプリ名を変更する方法

Appleからアプリ名が規約違反って事でリジェクトされてしまったので、その時にやったアプリ名を変更する手順をについて書きます。

プロジェクト名の変更

プロジェクト->TARGETSを選択、右のIdentityでProject Nameを新しいアプリ名に変更する。
リネームの確認画面で確認し[Rename]をクリック。

Bundle Identifierの変更

通常であれば、ドメイン名.プロジェクト名 の用な感じで自動で設定されますが、今回はプロジェクト名を新しい名前に変更したので、Bundle Identifierも自動で変わってしまいます。新規でiTunes Connectに申請する場合(App IDをまだ作成してない場合)はいいですが、バージョンアップなので既存のApp IDを指定しました。

Archive Nameの変更

[Edit Scheme…]よりArchive Nameを設定しました。

無事、申請完了しました。

bitbucketでプロジェクト管理

gitを使ったホスティングサービスだと、githubが一番有名ですが、bitbucketというgitとmercurialも使えるホスティングサービスもあります。

通常であれば、githubでも十分なのですが、bitbucketはプライベートリポジトリが無料で作れるところがいいなと思っています。

Free source code hosting — Bitbucket.

目次

  • bitbucketでプライベートリポジトリを作る
  • ソースコードをpushする

bitbucketでプライベートリポジトリを作る

Privateにチェックをいれて、Repository typeをGitにします。
今回は既存のiPhoneアプリのソースをバージョン管理しようと思うので、LanguageにはObjective-Cを選択します。

ソースコードをpushする

既存のソースコードはgitで管理されてないプロジェクトなので、git initでローカルにリポジトリを作成して、.gitignoreを作成し、バージョン管理しないファイルタイプを設定します。
git remote addでリモートリポジトリを追加します。(今回はoriginという名前で追加)
あとは、ローカルにコミットしてリモートリポジトリにプッシュすれば終了です。

[suusuke@macbook ~]$ cd ~/iPhone/BeamsFlickr/
[suusuke@macbook BeamsFlickr]$ git init
[suusuke@macbook BeamsFlickr]$ vi .gitignore

# hidden/temp files
.DS Store
*.swp
*~.nib
 
# Build dir
build/

# Xcode project files except for the project file
*.xcodeproj/*
!*.xcodeproj/project.pbxproj

# Windows image thumbnail file
Thumbs.db

# User-specific project settings
*.mode1v3
*.mode2v3

[suusuke@macbook BeamsFlickr]$ git remote add origin [httpsのurl]
[suusuke@macbook BeamsFlickr]$ git commit -m "First Commit."
[suusuke@macbook BeamsFlickr]$ git push -u origin master

Cocoa Touch(Objective-C) でシングルトンを実装する

まずはオブジェクトの関連図。

PossessionStoreというオブジェクトをシングルトンで実装したい場合を想定します。
PossessionStoreNSMutableArrayのプロパティを持ちます。

ヘッダー

#import <Foundation/Foundation.h>

@class Possession;

@interface PossessionStore : NSObject
{
    NSMutableArray *allPossessions;
}

// ファクトリーメソッド
+ (PossessionStore *)defaultStore;

@end

ファクトリーメソッド(クラスメソッド)defaultStoreを宣言します。
このメソッドの実装では、PossessionStoreインスタンスが既に生成済みかどうか確認します。
PossessionStoreインスタンスがある場合には、クラスはそれを返し、ない場合は、インスタンスを生成してからそれを返します。

実装

#import "PossessionStore.h"
#import "Possession.h"

static PossessionStore *defaultStore = nil;

@implementation PossessionStore

+ (PossessionStore *)defaultStore
{
    if (!defaultStore) {
        // シングルトンを生成する
        defaultStore = [[super allocWithZone:NULL] init];
    }
    
    return defaultStore;
}

// 別のインスタンス生成を防ぐ
+ (id)allocWithZone:(NSZone *)zone
{
    return [self defaultStore];
}

- (id)init
{
    // 既にPossessionStore インスタンスが生成済みの場合
    if (defaultStore) {
        // 既存のものを返す
        return defaultStore;
    }
    
    self = [super init];
    if (self) {
        allPossessions = [[NSMutableArray alloc] init];
    }
    return self;
}

- (id)retain
{
    // 何もしない
    return self;
}

- (oneway void)release
{
    // 何もしない
}

- (NSUInteger)retainCount
{
    return NSUIntegerMax;
}

@end

PossessionStoreインスタンスを保持するグローバルな静的変数を作成します。

クラスのインスタンスが1つだけ生成されるように、+defaultStore+allocWithZone:-initを実装し、保持カウントメソッドをオーバーライドして、defaultStoreを他から解放できないようにします。

これで、シングルトンの実装が完了です。

ドキュメント

Cocoa Fundamentals Guide: シングルトンインスタンスの作成.

SBTickerViewでFlipboard風のUIを実現する

FlipboardのUIは操作性、見た目ともにすごく好きです。

http://www.youtube.com/watch?v=YOQAGmXOERI

そんなUIをSBTrickerViewを使うと簡単に実現できます。

githubからcloneすると、デモプロジェクトが一緒になっているのでそれを参考にサンプルを作って見ました。

blommegard/SBTickerView – GitHub.

UIImageを使えば写真、SBTickViewというクラスを使えばテキストをパラパラと表示できます。
SBTickViewを参考に拡張すれば画像とテキストを重ねたものも作れるかもと思いました。

写真をパラパラめくるアプリ



Xcodeが最新なのにiOS5 SDKがインストールされてない

iOS5 SDKが無いせいで実機にビルド、転送する際にビルドできないとなってしまいました。
※プロジェクトの設定でBase SDKでiOS5(Lastest iOS)が選択できないため
SpotlightでXcodeを検索してInstall Xcodeを実行するとiOS5 SDKインストールできるとどこかのブログに書いてあったので実行したらインストールできました。

Xcodeでフォーマット

個人的にソースコードは見やすく書きたいタイプの人間なのですが、Xcodeにはフォーマット機能がありません。

調べたところ、外部のコード整形プログラムUncrustifyを使用して、それをXcodeから呼び出す形で実現できるようなので、フォーマットできるようになるまでの備忘録として書いておきます。

Uncrustifyのインストール

githubにソースコードが上がっていたのでそれをダウンロード、configure、make、installします。

$ cd ~/Desktop/bengardner-uncrustify-20b21c2/
$ ./configure
$ make
$ sudo make install

成功すると /usr/local/bin/uncrustify にインストールされます。
また、ビルドしたuncrustifyディレクトリのtests/configには、サンプルで設定ファイルがあります。この中のobj-c.cfgという設定ファイルを使ってもいいのですが、今回参考にさせて頂いたサイトのdrikinさんが設定ファイルを公開されていたので、そちらをとりあえずそのまま使用させてい頂きました。

設定ファイルを/usr/local/share/uncrustify/にコピーします。

$ sudo cp ~/Desktop/obj-c_dk.cfg /usr/local/share/uncrustify/

Xcodeのスクリプトに登録する

Xcodeからユーザースクリプトを登録します。

入力を文書全体、出力を書類の内容を置き換える、ショートカットをShift+Ctrl+i、スクリプトを以下のものを登録しました。

#!/bin/sh

echo -n “%%%{PBXSelection}%%%”
/usr/local/bin/uncrustify -q -l oc+ -c /usr/local/share/uncrustify/obj-c_dk.cfg <&0 echo -n "%%%{PBXSelection}%%%" [/bash] これで、フォーマットできるようになりました。 ビルドする際に自動でフォーマットもできるようなので、その場合はCode beautifier and formatter with Xcodeを参考に。

設定ファイルについてはこちらが参考になります。