Xcode

CocoaPods で pod install ができない

久しぶりに、iOSアプリの開発を始めて見たら、CocoaPodsでライブラリーのインストールができない。

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:in `mkdir': Permission denied - /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-14/2.0.0/xcodeproj-0.16.1 (Errno::EACCES)
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:in `fu_mkdir'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:219:in `block (2 levels) in mkdir_p'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:217:in `reverse_each'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:217:in `block in mkdir_p'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:203:in `each'
....

パーミッションの問題なのかと思って、rootで実行してみたりしたけど、解決できず。
再インストールしたら、できるようになりました。

$ sudo gem uninstall cocoapods
$ sudo gem uninstall xcodeproj
$ sudo gem install xcodeproj
$ sudo gem install cocoapods

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

Xcode5でProvisioning Profileの確認

Xcode5以前はOrganizerから、更新や削除ができたのですが、Xcode5になってから、Preferencesから参照、更新、削除を行うようです。

Xcodeの[Preferences..]から、設定を開き、[Accounts]タブを開きます。
Accounts

対象のApple IDを選択し、View Details..からProvisioning Profileの更新や確認、削除ができます。

スクリーンショット_2014_04_27_15_53

新しいMacのXcode5にインストールしたプラグイン

プラグインディレクトリ作成

$ mkdir -p ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins

Alcatraz

プラグイン管理用のプラグイン。

Alcatraz : Xcode Package Manager.

XVim

XcodeのVimプラグイン。

Nothing But Programming – Software.

Alcatrazからインストールを試みてみたが、インストールが上手くいかないので、手動でインストール。

5/13追記

XVim を Xcode 5.1 にインストール – Unmotivated.

Xcode5.1にアップデートしたら動かなくなったので上記方法でインストール。

Obsidian Code Theme for Xcode

カラーテーマ。

Obsidian Code Theme for Xcode.

Alcatrazからインストール。
Fontサイズがすべて18ptに、なってしまってたので、11ptに変更。

5/21追記

すべてAlcatrazからインストール。

XTodo

TODOや、FIXMEなどのコード内の注釈を抜き出して表示してくれるプラグイン。

https://github.com/trawor/XToDo.

KSImageNamed-Xcode

UIImageのファイル名を補完してくれるプラグイン

https://github.com/ksuther/KSImageNamed-Xcode.

XAlign

コードを自動的に整列するプラグイン

https://github.com/qfish/XAlign.

その他

秘密鍵のエクスポート・インポート

http://www.lastday.jp/2012/09/02/multiple-mac-ios-application
http://sbkro.hatenablog.jp/entry/2012/06/05/225631

Push Notification Push SSL Certificate 更新

Push Notification Push SSL Certificate の更新時期が迫ってきたので、更新の際の備忘録。

目次

  • Certificateの更新
  • 鍵の生成

Certificateの更新

  1. iOS Dev Center – Apple Developer にログインする。
  2. 対象のApp IDから「Settings」をクリックする。
    スクリーンショット_13_05_29_11_40-3
    スクリーンショット_13_05_29_11_42
  3. 「Create Certificate…」をクリックして(今回はリリース用Production)、CSR(証明書署名要求ファイル)をアップロードする。CSR(証明書署名要求ファイル)の作成方法は suusuke – blog – プロビジョニングファイル作成から実機転送手順 参照
    スクリーンショット_13_05_29_11_43
  4. アップロードすると、Certificateがダウンロードできるようになるので、ダウンロードしたaps_production.cerファイルをダブルクリックしてキーチェーンに登録する。
    スクリーンショット_13_05_29_15_31

鍵の生成

  1. キーチェーンを開き、登録した証明書を .p12形式でエクスポートする。
    スクリーンショット_13_06_05_16_10
    1. 右クリック→書き出す→フォーマットを「個人情報交換(.p12)」形式にして、保存する。ファイル名は「apns-pro-cert.p12」
      スクリーンショット_13_06_05_16_18
    2. パスワードは何でもOK、キーチェーンのアクセス許可のパスワード聞かれる場合はmacのrootのパスワード
      無題-3
  2. 1と同様の手順で、秘密鍵もエクスポートする。ファイル名は「apns-pro-key.p12」
    スクリーンショット_13_06_05_16_24-2
  3. pam形式に変換する。
    1.  
      iMac:Desktop user$ openssl pkcs12 -clcerts -nokeys -out apns-pro-cert.pem -in apns-pro-cert.p12 
      Enter Import Password: //←キーチェーンで入力したパスワード 
      MAC verified OK 
      iMac:Desktop user$ openssl pkcs12 -nocerts -out apns-pro-key.pem -in apns-pro-key.p12 
      Enter Import Password: //←キーチェーンで入力したパスワード 
      MAC verified OK 
      Enter PEM pass phrase: 
      Verifying - Enter PEM pass phrase: 
      iMac:Desktop user$ openssl rsa -in apns-pro-key.pem -out apns-pro-key-noenc.pem 
      Enter pass phrase for apns-pro-key.pem: //←key作成時に入力したパスフレーズ 
      writing RSA key 
      iMac:Desktop user$ cat apns-pro-cert.pem apns-pro-key-noenc.pem > apns-pro.pam
      
  4. 作成した「apns-pro-cert.pem」、「apns-pro.pam」をアップロードして更新

ドキュメント:https://developer.apple.com/jp/devcenter/ios/library/documentation/RemoteNotificationsPG.pdf

今回はサーバー側はPerlで作られているアプリだったので、Push Notificationを使ってみる – iOSアプリ開発トピック が参考になりました。

証明書(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 Programの期限内での更新

iOS Developer Programの更新作業をした際の覚書です。

iOS Developer Programのライセンスの有効期間は1年間となっていますので、更新する必要があります。

更新については、Program Renewals – iOS Developer Program – Support – Apple Developer.に詳しく書いてあります。
更新しなかった場合もどうなるか書いてあるので、一度は読んでおくと良いと思います。

なお、期限が切れる前に更新していますので期限が切れた後に更新した場合とは少し異なると思います。

目次

  • ライセンスの購入
  • 証明書(Certificate)の更新
  • Provisioning Profileの更新

ライセンスの購入

  • iOS Dev Center – Apple Developer.にてライセンスを購入します。
  • 更新が近づいていると、ログイン後Updated Program License Agreementとメッセージが表示されているので、Review Agreementのリンクから購入します。 IOS Dev Center  Apple Developer 12 11 13 12 47 3
  • 規約を読んでチェックしI Agreeをクリックします。 Member Center  Apple Developer 12 11 13 12 48
  • iOS Developer ProgramをチェックしてContinueをクリックします。 Apple Developer Program Renewal  Select Program 12 11 13 12 49
  • Continueボタンをクリックします。 Apple Developer Program Renewal  Review Your Purchase Details 12 11 13 12 50
  • Add to cartボタンをクリックします。 Apple Developer Program Renewal  Purchase 12 11 13 12 52
  • Apple Store画面に遷移するのでご購入手続きへボタンから購入します。 カート  Apple Store for Business  Japan 12 11 13 12 52
  • 請求先や支払方法を確認し、注文を確定させます。 Thank You  Apple Store for Business  Japan 12 11 13 12 58 2
  • 5,6時間後にはiOS Developer Program更新完了のメールが届くので、iOS Deve Centerにログインして期限が伸びているか確認できればライセンスの更新は完了です。 Member Center  Apple Developer

証明書(Certificate)の更新

    • キーチェーンアクセスから、証明書(Certificate)の元になる証明書要求を作成します。
      • 証明書アシスタント認証局に証明書を要求…
      • デベロッパー登録時のメールアドレス入力
      • ディスクに保存
      • 鍵ペア情報を指定(鍵のサイズ:2048ビット, アルゴリズム:RSA) 証明書アシスタント 2 証明書アシスタント 3 2
      • CertificateSigningRequest.certSigningRequestをディスクに保存 証明書アシスタント 2
    • iOS Provisioning Portalにログインして、古い証明書(Certificate)をRevokeをクリックして削除します。 Certificates  iOS Provisioning Portal  Apple Developer
    • Request Certificateをクリックして、作成した証明書要求(CertificateSigningRequest.certSigningRequest)をアップロードします。 Certificates  iOS Provisioning Portal  Apple Developer
    • アップロード後画面をリロードするとDownloadボタン、click here to download now.リンクが現れるのでクリックして、証明書(ios_development.cer、AppleWWDRCA.cer)をダウンロードします。 Certificates  iOS Provisioning Portal  Apple Developer 2
    • ダウンロードした2つのファイルをダブルクリックして、キーチェーンアクセスに登録します。(Development、Distributionともにここまでの手順行う)
    • キーチェーンアクセスから古い証明書と鍵を削除する(消しておかないと期限が切れた場合、XCodeでビルドに失敗します。) キーチェーンアクセス 3

Provisioning Profileの更新

    • 再度、iOS Provisioning Portalにログインし古い証明書(Certificete)に紐付いている、Provisioning Profileを更新します。Modifyボタンをクリックして、証明書を新しい物に紐付けます。 Provisioning Profiles  iOS Provisioning Portal  Apple Developer Distribution Provisioning Profiles  iOS Provisioning Portal  Apple Developer
    • Donwloadボタンをクリックして新しいProvisioning Profileをダウンロードして、Organizerに登録するか、OrganizerからRefreshボタンをクリックしてProvisionin Profileを更新します。古いものは削除します(TeamがUnknownのもの) Provisioning Profiles  iOS Provisioning Portal  Apple Developer Organizer  Devices
    • 最後に実機でデバックできれば更新完了です。(OrganizerでRefreshしたタイミングかわからないのですが、キーチェーンアクセスに古い証明書が復活してたのでXCodeで証明書エラーになる場合はそこを確認するといいと思います。)

iTunesConnectへ申請する方法

iPhoneやiPadのアプリを作成したら、AppStoreに掲載するためにiTunesConnectからアプリを申請します。
初めて、申請してみたのでその時の備忘録です。

目次

  • 申請の準備(開発証明書、AppID、プロビジョニングファイル作成)
  • iTunesConnectにアプリの情報登録
  • アプリのビルド、サブミット

申請の準備(証明書、App ID、プロビジョニングファイル作成)

証明書については、

suusuke – blog – プロビジョニングファイル作成から実機転送手順.

で書いたとおり既に作成している状態です。

App IDの作成

iOS Dev Center – Apple Developer.

iOS Dev CenterからApp IDを作成します。

  • 右側にあるリンクから「iOS Provisioning Portal」に移動。
  • 左側にあるリンクから「App IDs」→「New App ID」→「Create App ID」へ移動。
  • 「Description」に通称または説明を入力。
  • 「Bundle Seed ID (App ID Prefix)」は複数ある場合は、適切なものを選択。(私の場合はひとつしかないので選択不可。複数チーム登録している場合など選択できる?)
  • 「Bundle Identifier (App ID Suffix)」は”com.domainname.appname”の様な形式で入力する。
  • Submitを押す。

プロビジョニングファイル作成

  • 左のメニューから「Provisioning」に移動して「Distribution」タブをクリック
  • 「New Profile」を押して「Create iPhone Distribution Provisioning Profile」へ移動する。
  • 「Distribution Method」→「App Store」
  • 「Profile Name」→プロファイルの名前。(アプリ名と同じでなくてもOK。ただ同じ方が分かりやすい。)
  • 「Distribution Certificate」→公開用証明書作ったときの名前が表示されている
  • 「App ID」→作成したAppIDを選択
  • 「Devices (optional)」→Ad Hoc版を作成する場合は必要ですが、今回はApp Storeようなので選択なし
  • 「Submit」クリック
  • しばらくするとStatusが「Pending」から「Active」になるので、Downloadを押してダウンロード・保存
  • 「[Profile Name].mobileprovision」を適当な場所に保存
  • ダブルクリックすると、Xcodeのオーガナイザに登録されます。

iTunesConnectにアプリの情報登録

事前準備

  • Store用の説明文の用意します。ちなみに、iPhone用のStoreは一行全角23文字表示されます。
  • スクリーンショットの用意。形式は、jpg / tif / png。下記はサイズ。単位はpxです。
    (iPhoneの場合のサイズ:960×640, 960×600, 640×960, 640×920, 480×320, 480×300, 320×480, 320×460)
    (iPadの場合のサイズ:1024×768, 1024×748, 768×1024, 768×1004)
  • Store用アイコンを用意。形式は、jpg / tif / pngで、サイズは512×512。

iTunes Connectにてアプリの情報を登録する。

iTunesConnectはiOS Dev Centerからアクセスします。

「Manage Your Applications」の「Add New App」をクリック 。

初回のみ”Company Name”(Storeに表示される名前)を入力。

第1ページ

  • 「Default Language」を設定。
  • Application name – アプリの名前 。
  • SKU Number – 他のアプリとかぶらない任意の番号 。自分はその日の日付と0001。
  • Bundle ID – 先ほど作ったやつ。今からアップロードするアプリと対応されます。

第2ページ

  • Availability Date – app storeに出る日。
    (※審査が終わった日か、ここで設定した日の遅い方が採用されます。)
  • Price Tier – 値段を設定します。
  • Discount for Educational Institutions- 教育機関向けの場合、割引するか。
  • 売る国を選ぶ場合ここで設定します。デフォルトだと、全部選択されてます。

第3ページ

  • 最初に選んだ「Default Language」の表示設定です。
    (※Englishで作成して、後で日本語版を作成しました。)
  • Version Number – バージョン。プロジェクトと同じ数字。基本は1.0。
  • Description – アプリの説明。
  • Primary Category – 自分が思う1番のカテゴリを選択。
  • Secondary Category – 自分が思う2番のカテゴリを選択。
  • Keywords – 検索キーワード。カンマ区切りで入力。
    (※100bytes以内。いくらでも入力できてしまうので、優先順位の高い順に記入していくと無難)
  • Copyright – 例を参考に入力。
  • Contact Email Address – 連絡先のメアド。
  • Support URL – アプリのサポートのためのサイトを記入。
  • App URL (optional) – 自分のアプリの紹介サイトを記入。
  • Review Notes (optional) – アプリ審査の為の追加情報。
    (※ユーザー登録が必要なアプリなら、サンプルのアカウントを記入が必須)
  • Rating – レーティング。適切に選択。
    (※Apple側であとで変更する場合があるようです)
  • EULA – End User License Agreement (EULA)を自分で設定したい場合はここで設定する。
  • Images – 先ほど用意しておいたスクリーンショットとかを指定する。
    (※サイズが間違ってる場合はErrorとなります。)
  • 確認画面みたいなのになるので、「View Details」で確認する。

別言語を追加する場合

  • 「Manage Localizations」をクリック。
  • 「Add New Language」をクリックして、言語を追加していく。
  • Languageを選び、同じ事を選択言語でやる。
  • すべて終わったら「Done」をクリック。
    (※ここまでやると、アプリの専用ページやURLができるので、アプリURLを使う場合はここから取得する。その際、URLに「/us/」とあれば、「/jp/」に変えておけば日本語のAppStoreURLになります。)
  • 「Ready to Upload Binary」をクリック します。
  • 暗号化技術とかを使っているのか聞かれるので、Yes/Noを選択。
  • そのうちステータスが「Waiting For Upload」になるので、待つ。

アプリのビルド、サブミット

  • Xcodeで「Info.plist」の「Bundle identifier」と「Bundle version」を設定する。
    (※申請内容と合致するようにしましょう)
  • 画面左上にある「Scheme」のプルダウンメニューにある「Edit Scheme」をクリック 。
  • 左側のメニューの中から「Archive」をクリック 。
  • 「Build Configuration」を「Release」か確認して、「OK」をクリック。
    (※Releaseになっていなければ、Releaseにします)
  • 左側にあるプロジェクト名をクリックしたら行ける画面から、上のタブの中の「Build Settings」を選択。
  • 表示を「All」にして、その中の「Code Signing」の「Code Singing Identity」を、申請用につくったのに設定
  • 画面左上にある「Scheme」のプルダウンメニューから「iOS Device」を選択。
    (※シミュレーション用になっているとダメです)
  • 画面上部にあるメニューの「Product」から「Archive」を選択します。
  • 自動的にOrganizerの「Archives」が開くので、右上の「Validate…」をクリックし、IDとパスワードを入力。
  • Applicationを、先ほど登録したアプリ名に。Identityを自分の名前のiPhone DistributionにセットしてNextをクリック。
  • 正常にいけば、正常だよっていうお知らせとともに、右下に「Finish」が表示されるので、クリック。
    (※この時アプリのStatusは「Passed Validation」 )
  • 今度は右上の「Distribute…」をクリック。”Submit to the iOS App Store”を選択してNextを押す。
  • 正常に行けばエラーが出ない。右下のFinishをクリック。
    (※この時アプリのStatusは「Submitted」)
  • アップロードはこれで完了します。
  • iTunes Connectの該当アプリのStausを確認すると、「Waiting For Upload」→「Upload Received」→「Waiting For Review」に変わっているか確認する。

あとは、審査を待つのみ。。。

参考サイト

App StoreへのiPhoneアプリの登録手順のまとめ(Xcode4環境).

Facebookノートで書かれている記事ですが、物凄くしっかりまとまってます。

Organizer で API Reference を参照した際に crash してしまう現象を解消する方法

自宅ではXcode 4.2.1 on Lion、会社ではXcode 4.2 on Snow Leopardというなんとも言えない環境で開発しています。

Organizer で API Reference を参照した場合、会社の環境だと

“index.html” is locked for editing and you may not be able to save your changes. Do you want to unlock it?
The file “index.html” could not be unlocked. The file is a remote resource. Try making a local copy.

というようなメッセージが表示され、その後Xcodeが落ちてしまいます。

オンラインヘルプを見ればいいやとそのままにしてたのですが、解決方法がわかりました。

手順は

  1. Xcode の環境設定を開く
  2. Download カテゴリーをクリック
  3. Documentation タブをクリック
  4. “iOS 5.0 Library”を選択し、”Check and Install Now”をクリック

です。

つまりは、iOS 5.0 Library のドキュメントがインストールされたなかったってことなのかな!?

XCode 4のスニペットをDropboxで同期する

Snippets — Code Snippet Manager for Mac OS Xを使っている人も多いようなのですが、XCode 4から導入されたCode Snippet Libraryも結構使えるので、今はそちらを使っています。

複数開発マシンがある場合は、同じ環境で開発したいのでスニペットをDropboxで同期してどのXCodeからも使えるようにします。

コードスニペットは

~/Library/Developer/Xcode/UserData/CodeSnippets

に保存されるので、この中身をDropboxに移動して、CodeSnippetsフォルダを削除しておきます。

その後、MacDropAny.という

特定のDropboxに置いてあるフォルダのシンボリックリンクを作成するアプリで

~/Library/Developer/Xcode/UserData/CodeSnippets

の場所にシンボリックリンクを作ればOK!