【In-App Purchase】iOSでInvalid Product Identifierが出た時の対処法
アプリ内課金でアイテム情報が取得できなかった時の対処法です。
今回のケースでは、iTunesconnectの「契約/税金/口座情報」を入力する事で解決しました。 入力後30分くらい経ったらプロダクト情報が取れるようになりました。
シンプルなRESTClient、insomniaを試してみる
insomniaというRESTClientを試してみました。
アプリはこちらのページからダウンロードしました。
起動後画面は下のようなものです。
このようにURL指定でリクエストを送る事ができます。
ベーシック認証・ヘッダー・パラメータなどを自由に付けれるようです。
作成したリクエストは保存する事もできます。
【Swift】呼び出し元のメソッド名を取得する
メソッドの呼び出し元を取得する方法を調べました。
良くある方法はスタックトレースを見る方法です。
class MyClass { func originMethod() { targetMethod() } func targetMethod() { let symbols = NSThread.callStackSymbols() print(symbols.count >= 2 ? symbols[1] : "") } }
以下のような形式で出力されるので少し加工が必要です。
1 MyApp 0x000000010be1f242 _TFC5MyApp7MyClass12originMethodfT_T_ + 18
他にもデフォルト引数で#functionを受け取る方法もあります。
class MyClass { func originMethod() { targetMethod() } func targetMethod(originMethodName: String = #function) { print(originMethodName) } }
こちらだとメソッド名がしっかり出てくれるので扱いやすいです。
targetMethod
参考URL
【Swift】メソッドがどこから呼ばれているかを知るTips - debug identifiers - - Qiita
自作のCocoaPodsライブラリのバージョンを上げる
自作のCocoaPodsライブラリのバージョンを上げる方法です。
まずはpodspecファイルのバージョンを更新します。
Pod::Spec.new do |s| s.version = "0.1.4" # ここのバージョンを変える end
次はそのバージョンのタグを作ってpushします。
git tag 0.1.4 git push --tags
最後にpodコマンドでライブラリの更新をします。
pod trunk push
DIコンテナとは何かを調べてみた
DIコンテナとは何か調べてみました。
サンプルはSwiftで書かれています。
DIとは
DIとはDependency injectionの略で、デザインパターンの一種です。
日本語では言うと依存性の注入などと呼ばれる事が多いです。
このデザインパターンは複数の関連するオブジェクトの結合を疎にする為のものです。
例えば以下のようにOwnerはDogクラスに紐付いているとします。
もしこのコードで、OwnerにDogのサブクラスを渡したいと言われたりDogのプロパティーを変更したいと言われると都度Ownerを変更する必要があります。
そうなるとOwnerが多くの場所で使われている場合にテストが大変ですし、柔軟性にも欠けます。
class Owner { func exec() { Dog().howl() } } class Dog { func howl() { print("wan!") } } Owner().exec()
それをDIを使って変更してみます。
DIを使うと以下のようになります。
Dogをコンストラクタで外部から渡す事で柔軟なクラスになりました。
class Owner { let dog: Dog init(dog: Dog) { self.dog = dog } func exec() { dog.howl() } } class Dog { func howl() { print("wan!") } } Owner(dog: Dog()).exec()
DIコンテナとは
DIコンテナとはDIを実現できるフレームワークの事を指します。
JavaのSpring Frameworkなどが有名です。
参考URL
仕事に役立つプログラミング・キーワード - DIコンテナ【Dependency Injection Container】:ITpro
依存性の注入 - Wikipedia
RealmのデータをGUIで確認できるRealm Browserを試してみた
Realm BrowserというRealmのデータを見れるツールが出ていたので試してみました。
Realmが公式で開発しているもので、1年以上前から出ていたようです。
起動するとRealmファイルの場所を聞かれます。
Realmファイルは、シミュレータのフォルダにrealmという拡張子で保存されているのでそれを指定します。
シミュレータのフォルダは以下のパスです。
device_idとapp_idには端末のIDとアプリのIDを指定します。
~/Library/Developer/CoreSimulator/Devices/#{device_id}/data/Containers/Data/Application/#{app_id}
デフォルトのまま使っている場合、その中のDocumentsフォルダにRealmファイルは格納されています。
Documents/default.realm
画面はこのようにModelとそのデータ一覧が表示されています。
検索は右上の検索窓から行う事ができます。
全カラムから検索するようです。
値の更新と削除はできました。
行の追加は、メニューに「Add new object」というものがあったのですがうまく動いてくれませんでした。
メニューを見たところ他にもCSVの吐き出しや定義をコードとして出力する機能を備えていそうです。
MacにDjangoをインストールしてサーバーを動かす所まで試してみた
Djangoをインストールしてサーバーを動かすところやってみました。
まずはPythonのパッケージ管理ライブラリであるpipをインストールします。
easy_install pip
次はpipを使ってdjangoをインストールします。
pip install django
インストールが終わったのでプロジェクトを作ってみます。
django-admin.pyを使ってtest_appというプロジェクトを作成します。
django-admin.py startproject test_app
最後にプロジェクトを起動してみます。
runserverコマンドでサーバーを起動します。
cd test_app/ python manage.py runserver
このようにサーバーが起動しました。
migrateするように言われていますが、しなくても一応動かす事ができます。
実際にlocalhost:8000にアクセスすると以下のようにページが表示されていました。