投稿

In-app purchasesのmissing metadata

アプリ内課金でハマってしまった。 アプリ内課金でmissing metadataがローカライズのところに出て、消し方がぜんぜんわからん。 いろいろ調べて、スクリーンショットを追加したら消えた。 追記: ローカライズのところで名前とDescriptionに同じものを入れるのもNGとのこと。 アプリ内課金の画像をアプリの画像と同じにするのもNG。

Sketchが期限切れで使えなくなって困る

画像作成ソフトのSketchをAppleのApp Storeで購入した場合、バージョン43.2まではアップデート可能で使用権利があります(人によっては前後するかも)。 それ以降は期間が切れるのでバージョン44から使用権利がなくなりました。バージョン43.2は永久的に使用権利があります。 ところが、バージョン44(数日間のお試し)を入れたら古い方の43.2も使えなくなってしまいました。 ライセンスキーを古いメールのなかから発見し、それを入力することで43.2が普通に使えるようになりました。要するにライセンスキーを入れる必要があった。

アプリを iPad Pro 10.5 インチに対応させるには

イメージ
iPad Pro10.5インチが出ました。 既存のアプリを10.5インチ画面に対応させるわけですが、Xcode上でどこを設定すれば対応になるのか疑問です。ここで言う対応とは画面のサイズを取得したときに1112×834(10.5インチiPadのデータ)が得られる状態のことを言っています(コードは下記)。前回の12.9インチの時は苦労しました。 いろいろ触って見つけました。 今回はRequires full screenのようです。 なんでこんなに微妙なところにするのか Requires full screenをONにするとシミュレータで10.5を選択し起動しても9.7のサイズ(1024×768)が取得できます。 Requires full screenをOFFにするとシミュレータで10.5を選択し起動すると10.5のサイズ(1112×834)が取得できます。 override func viewDidLoad() { super.viewDidLoad() let deviceHeight = UIScreen.main.bounds.height let deviceWidth = UIScreen.main.bounds.width print(deviceHeight, deviceWidth) } 環境は、Xcode 8.3.3上でプロジェクトの作成とシミュレータ実行を行いました。 これ以外にある可能性もありますし、このやり方が常にうまくいくとは限らないと思いますが。

Swiftの廃止になったコンパイルエラー

公開しても特にメリットがあるものではないが、間違えて公開を押してしまった。 Prefix/Postfix '***' is reserved 前置/後置演算子の***は予約されています 【出現ver】Swift 2.1 var abc =5 //エラー var def= 10 //エラー 決められた正しい使われ方をしていない。 =の前後のスペースの取り方が統一されてない。開けるなら左右とも開ける、閉じるなら左右とも閉じる。 【非出現ver】Swift 3.1 【このコンパイルエラーに変更になりました】'***' must have consistent whitespace on both sides All stored properties of a class instance must be initialized before returning nil from an initializer イニシャライザからnilで返る前に、クラスインスタンスの全てのストアドプロパティを初期化しないといけない 【出現ver】Swift 2.1 class ClassA { var a: String init?(a: String?) { if a == nil { return nil //エラー } self.a = "" } } Swift 3.1ではエラーにならなかった。仕様変更か。 【非出現ver】Swift 3.1 Cannot assign to 'let' value '〜' letで宣言した定数に値を代入しようとした 【出現ver】Swift 2.1より前 【非出現ver】Swift 2.1 【このコンパイルエラーに変更になりました】Cannot assign to value: '***' is a 'let' constant Cannot assign to immutable value of type '***' 変更できない型'***'に代入でき...

iOS10.3 で MPMusicPlayerController クラスの挙動が変わった

デバイスをiOS10.3にアップデートしたら自作の音楽再生アプリでバグが発生しました。選んだ曲と別のものが再生されるバグです。 はじめに この問題について述べる前にMPMusicPlayerControllerクラスのことを軽く書きます。 デバイスに入っている音楽を自作アプリ内で流すとき、曲のリストを取得してMPMusicPlayerControllerクラスのインスタンス(この記事ではこれをPlayerと呼ぶことにします)にセットします。その後、Playerに対して曲の再生、停止などの指令を出します。 //.h MPMusicPlayerController *iPodMusicPlayer; MPMediaQuery *albumsQuery; MPMediaItemCollection *selectedAlbumCollection; //.m iPodMusicPlayer = [MPMusicPlayerController systemMusicPlayer]; //Playerの作成 albumsQuery = [MPMediaQuery albumsQuery]; //アルバム単位で情報を取得 selectedAlbumCollection = [albumsQuery.collections objectAtIndex:6]; //6のアルバムの情報を取得 [iPodMusicPlayer setQueueWithItemCollection:selectedAlbumCollection]; //取得した6のアルバムの情報をPlayerにセット [iPodMusicPlayer play]; //再生指令 Playerの作成するときは systemMusicPlayer applicationMusicPlayer のいずれかで作成します。 ここから今回の問題についてです。 何パターンかの操作を行うことで問題の症状を細かく炙り出しました。 症状1 曲の再生を停止すると、Playerに設定した曲のリストが無効になる。(再設定が必要。) Playerに対するstop指令で失う。pause指令では失わない。 曲のリストを失ったら、次に再生する前にリストを設定し直します。新たにMPMediaQueryから曲...

Xcode 8.2 はシミュレータでスクリーンショットを撮ると落ちる on El Capitan

El Capitan 上の Xcode 8.2 は、シミュレータに付いているスクリーンショット撮影機能(File -> Save Screen Shot)を使うと落ちます。厳密に言うと1回目はOKで2回目に落ちる。 対策は シミュレータで、Edit -> Copy Screen Previewで、File -> New from Clipboard 手間もそんなに変わりません。 stackoverflowの記事(英語)

libswiftCore.dylibをロード出来ない問題

証明書はXcodeで自動で作成するようになったので、キーチェーンアクセスからappleの名前のものを手当たり次第削除して、Xcodeで一から作成したところ、アプリがシミュレータでは動作出来るのに、実機で実行できない問題にあたりました。Xcode 8.1です。 dyld: Library not loaded: @rpath/libswiftCore.dylib というエラーが出ます。 ググったらキャッシュをクリーンさせる系の解決策もありましたが状況は変わらず。 最終的に http://developer.apple.com/certificationauthority/AppleWWDRCA.cer をダウンロードすることで解決しました。(プロジェクトのクリーンもやったかも) https://forums.developer.apple.com/thread/21292 に書かれています。 このAppleWWDRCA.cerが何をするものかはわかりません。