[iOS] PC内のプロビジョニングプロファイルを一覧するプログラムを作ってみた

2016.04.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

Xcodeで開発を行っていると、沢山のプロビジョニングプロファイルがPCにダウンロードされます。 そして、これらは、Xcodeのメニューから表示できる、Preferences - Account - View Detailsや、「iPhone構成ユーティリティ」から確認できるようになっています。

001

002

しかし、正直な所、どちらも少し扱いづらく、また、表示される内容も限定的な為、今回、これを表示するプログラムを作ってみました。

名付けて、「Provisiong Profile Explorer」(雑ですいません)

次の図が、実行中の様子です。

007

コードは、下記です。Xcode7.3でコンパイルできます。

githubhttps://github.com/furuya02/ProvisioningProfileExplorer

2 機能

以下、機能について紹介いたします。

(1) 表示

上段が一覧表示で1行が1つのプロビジョニングプロファイルです。そして、選択したものの詳細が下段に表示されます。

表示されているのは、次のような内容です。

003

(2) 検索・ソート

カラムのヘッダをクリックするとソートが可能です。また、検索窓から、プロファイル名・AppID・UUIDで(大文字・小文字関係なく)検索できます。

004 005

3 実装

今回、Swift2.0で書きましたが、ちょっと時間を取られた所について覚書を兼ねて紹介させて下さい。

(1) NSCalendarUnitは、ビット演算できない

次のコードは、今までのSwiftでNSDateをNSDateComponentsで文字列に変換するコードですが、これが、 「No '|' candidates produce the expected contextual result type 'NSCalendarUnit'」とエラーになります。

var comps:NSDateComponents = calendar.components(NSCalendarUnit.YearCalendarUnit | NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.DayCalendarUnit,fromDate: date)
return String(format: "%04d/%02d/%02d", comps.year,comps.month,comps.day)

008

最初の引数は、Swift2.0では、次のように記述すようです。 結構、悩みました。

let comps = calendar.components([.Year, .Month, .Day], fromDate:date)
return String(format: "%04d/%02d/%02d", comps.year,comps.month,comps.day)

(2) C言語ライブラリのためのポインタ操作

これは、Swift2.0に限らない話ですが、SwiftからC言語のライブラリを呼び出すときに必要なるポインタ操作です。 今回は、プロビジョニングファイルの中に格納されている証明書を読み出す際に使用されています。

<br />var key:CFString = "label"
var value = CFDictionaryGetValue(credential,unsafeAddressOf(key)) // unsafeAddressOf(key)でCFStringのポインタを取得している
var label = unsafeBitCast(value, NSString.self) // value(ポインタ)から、実態(NSString)を取り出している

unsafeAddressOf()で、その変数のポインタを取得できます。また、unsafeBitCast()でポインタからデータを取得します。

4 最後に

最近のXcodeは、賢くなっていて、AppleDeveloperセンターとかなりシームレスで繋がっていて、あまりローカルのプロビジョニングファイルを気にする必要は無いようなので、このようなツールの使い道も無いのかも知れませんが、個人的には、色々勉強になって楽しかったです。(すいません、自己満足です)

5 参考資料


ObjC to Swift : NSCalendarUnit
ProvisionQL
https://developer.apple.com/legacy/library/technotes/tn2250/_index.html
アーカイブ済みバイナリのプロビジョニングを確認する