Xcode6でのNSUserDefaultsの保存場所

Xcodd6でiPhoneシミュレータでNSUserDefaultsを使った場合に、XXX.plistの保存場所がこれまでと違うところになっていました。

新しい保存場所

~/Library/Developer/CoreSimulator/Devices/
4F7008B7-994C-497F-81DF-BBE23011A436/data/Library/Preferences/
<Bundle Identifier>.plist

のような感じです(見やすいように改行しましたが、ほんとは1行です)。4F700…はデバイスID、はプロジェクトのTARGET、Identityに表示されるBundle Idetifierですね。

ドキュメントは

~/Library/Developer/CoreSimulator/Devices/
58029C13-C203-4155-B2B1-0BF46820347B/data/Containers/
Data/Application/5AB20983-88BA-42C8-A57F-1C01BDA7B9CB/Documents

なんだか長いですね。こちらも見やすいように改行しています。
58029C23…はデバイスID、5AB20983-…は何でしたっけ?

The private key for “ほげほげ” is not installed on this Mac.で疲れた

iOSアプリを久しぶりにアップデートしようとしたら、いくつものエラーが出まくって、こっちを潰せば、あっちからエラーという感じで一日中悩まされてしまいました。

結局、なんとかなってアップロードすることができたのですが、面倒だったのは今回のタイトル

The private key for “なんちゃら” is not installed on this Mac.

の解決でした。まずはこちらの説明のように秘密鍵をチェックしましたが、わたしの場合は鍵が入っています。

このサイトからもリンクがありますが、stackoverflowの記事にあるようにもっと面倒な手順になってしまいました。

画面は上の記事の画面と同じです。

ということで記事に従って進めました。(あたふたしてたから曖昧になっているかもしれません)

  1. iOS Dev Centerに入って、CertificatesのProduction用の(TypeはiOS Distribution)項目をRevokeボタンを押して削除。
    (「このままじゃまずいよ」って感じのメールが送られてきます)

  2. XcodeのPreference=>AccountsからView Detailsから何かするらしいんだけど、すでに

    • iOS Development
    • iOS Distributin
      の項目はあるのでそのまま何もせず。
  3. もういちどiOS Dev Centerに戻ってみると、Distribution用のCertificatesができているので、これを利用することに。

  4. Provisioning ProfilesのDistributionの項目が全部黄色になってしまったので、各ProvisioningファイルをEditして、新しく作成されたDistribution用Certificateに変更。(わたしは数が少ないいけど、多い人は大変です)。

  5. またまたXcodeに戻って、プロジェクトのCode Signingの部分を変更。

  6. PROJECGとTARGETの2か所のそれぞれReleaseを新しく作成したiPhone Distribution: XXX (XXXX)に変更

  7. その下のProvisioning Profileを適切なProvision名に変更する(わたしの場合は、数字と記号の羅列になっていました)。

これが終わったら、ふつうにArchiveしてValidate、無事にアップロードが完了しました。

これ以外にも、いろいろエラーが出ていたのですが、おそらくこれが解決の中心だったと思います。(自信ないけど)

HomebrewのEmacsを24にしてAUCTeXをインストール

何となくほっておいたEmacs23をEmacs24にアップグレードしました。

Emacsの時代は終わり、これからはSublime Text2を使うんだ、と思ってしましたが、
いろいろ不満があったり、使いこなす前に急ぎの作業が入ったりして、
Emacsも使い続けることにしました。どうせなら最新のバージョンにしたい。

というわけで、HomebrewでEmacs24にした手順です。

とりあえずアップデートしておきます。

$ brew update

Ghostscript関連のファイル(ほとんどフォント)が「Broken Symlinks …」と表示されるので

$ sudo brew prune

で削除しました(このGSは使ってない)。

さて、アップグレード

$ brew upgrade

autoconfが必要だということなので、

$ brew install autoconf

再び

$ brew upgrade

こんどは、automakeが必要とのメッセージが。

$ brew instasll automake

再々アップグレード

$ brew upgrade

Emacs24にアップグレードされました。

ApplicationのリンクはEmacs23のままなので、いったん削除して(削除は不要かな?)

$ brew linkapps

とするとApplicationフォルダに、Emacs24へリンクされたEmacs.appが生成されました。

ずっと以前はEmacsばかりだったのですが、どうもそれぞれ利点と不満があって、今では
Emacs, Sublime Text2, Mou, miあたりをいったりきたりしています。

unrecognized selector sent to instance 0x…

エラーでXcodeでの実行が止まってしまいました。

どうやら存在しないオブジェクトに何か使用としている感じです。削除したにも関わらず、それを知らないでメソッドを使おうとしているようです。

よくよくみたら

  [[NSNotificationCenter defaultCenter] postNotification:n];

のところで例外が発生してました。

Thread 1: EXC_BAD_ACCESS (code=1, address=0x….)

ようするに
1. オブジェクトが通知センターに登録していた。
2. 役割が終わってオブジェクトを削除した。
3. 通知の登録は残ったままだから、通知を送ろうとしたら相手がくて例外が発生。
となってしまいました。

ということで、通知センターに登録した場合は、不要になったらきちんと登録を解除しましょう。

[[NSNotificationCenter defaultCenter] removeObserver:取り除くオブジェクト];

process launch failed:failed to get the task for process XXX

Xcodeで実機を接続して実行すると、このエラーが表示されて落ちてしまいました。

ネットで調べるとほとんどがAdHoc用のプロビジョニングプロファイルに原因があるようです。

わたしの場合もAdHoc用のプロビジョニングプロファイルを設定してDeployGateから配布していたのでした。

修正は、プログジェクトのBuild SettingsからCode Signingを選んで、Provisioning ProfileのDebugをAdHoc以外のものに変更したら、無事起動することができました。

0518

原因が分かる前に、何度か試したら、iPhoneの画面自体が黒くなって反応しなくなってしまいました。しょうがないので、電源ボタンとホームボタンを長〜く押して、Appleのマークが出るまで待ちました。

DeployGate:必要なUDIDを入れずにアップしたら

iOSアプリの修正版をdeploygageにアップして配布しようとしたら、自分にはメールが送られてくるのに、必要な相手にメールが送られていませんでした。相手のUDIDを入れずにipaを作ってしまったのが原因でした。

アップロードしたipaファイルのプロビジョニングがどうなっているのかは、個々のアプリの「オプション」から「これまでのバージョン」を表示させて「UDID」リストを表示させることで分かります。

0424aa

0424bb

すると「プロファイル内に存在しない」との表示がされていました。表示では、Provisioning Profileに登録されていない場合はここからダウンロードしてiOS Dev Centerで登録するようにと表示されていますが、今回はすでに登録済で、ipaを書き出す際に別のファイルを指定してしまったのでこの処理は必要ありません。(でもこの機能は便利ですね)

0424cc

原因は、先に書いた通り必要なProvisioning Profileを選ばないでipaを書き出してしまったためです。

もういちど、XcodeからAdHoc用ipaを作りなおして、DeployGateに再アップ。こんどは自動的にメンバにメールが送られました。

DeployGageでiOSアプリを配布してみた

DeployGateのベータ版がiOSアプリをサポートしたというので使ってみました。

ipaファイルのアップロード

DeployGateのアカウントを作ったら、アップロードするipaファイルを用意します。

「アップロード」ボタン押して、ipaファイルを選択、必要なら説明を入れてアップロードします。

0422-a-b

配布する

右上から追加したいユーザ名かEmailアレドスを追加して「+」を押すと招待メールが送られます。アカウントがない相手ならアカウントを作ってもらいましょう。

0422-c

インストールする端末でメールを開いて、リンクを開くとDeployGateのアプリのインストールができます。

0422-d

DeployGateアプリを開くと、先ほどアップロードしたフアプリ名が表示されているので、ダウンロードしてインストールします。

0422-e-f

とりあえずこれだけの手順で配布は完了です。

AdHoc用のiOSアプリ:プロビジョニングプロファイルからipaまで

iOSアプリ開発中にベータテスト版をTestFlightやdeploygateなどで配布するときに必要になるAdHoc版を作成しました。

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

iOS Dev CenterにログインしてiOS Developer ProgramからCertificate, Identifiers & Profiles => Provisioning Profiles
と進んで、Provisioning ProfilesのDistributionから「+」をクリックして追加の画面を開き、「Ad Hoc」を選択します。

0411-a-b

次に「App ID」の設定ですが、「*」の付いたワイルドカードのApp IDを選択しました。

0421cc3

プロビジョニングプロファイルに含めるCertificatesを選びます。iOS Distribution用に設定したものが表示されているので、選択します。

0421dd3

プロビジョニングプロファイルに含めるデバイスを選びます。

0421ee3

最後に名前を設定すれば、あとはダウンロードするだけです。

0411-f-g

XcodeからAdHoc用ipaの作成

ダウンロードした「XXX.mobileprovision」ファイルをダブルクリックで登録して、Xcodeでプロジェクトを開き、プロジェクト名のところから表示される「Build Settings」を開きます。

0421hh3

「Code Signing」の「Provisioning Profile」から先ほど作成したプロビジョニングプロファイルを選択します。

出力デバイスを「iOS Device」にして、メニューのProductからArchiveを選択します。

Organizerが開いたら、Distribute => 「Save for Enterprise or Ad Hoc Deployment」を選択します。

0421-i-j

作成したProvisioning Profileを選んでExport、ipaファイルの保存先を選んで「Save for Enterprise Distribution」はチェックしないで「Save」します。これでipaファイルが生成されました。

0421kk3

iOS Dev Centerの登録デバイスを更新する

iOS Devicesにデバイスを追加しようとしたら、

Reset your device list before adding any new devices.

と表示されて追加できません。「+」ボタンを押しても反応しません。
そこで右側の「Get Started」で更新することにしました。

0420aa

すでに登録済のデバイス一覧が表示され全部にチェックが入っています。不要のデバイスはチェックを外して「Continue」します。

0420bb

確認画面が出るのでチェックして「Reset」すればアップデート完了です。
これで新しいデバイスを登録できるようになりました。

0420cc