カテゴリー別アーカイブ: Objective-C

【Swift4】【Objective-c】SKStoreReviewController でアプリ内レビュー

最近流行りのアプリの中でレビュー(アプリの評価)をつけてもらうやつを調べてみた。

参考サイト
SKStoreReviewController を単純な条件で出すだけでも好意的なレビューが増えて良かった
SKStoreReviewController で App Store の評価数が急増した話 – wootan’s diary

機能としてはiOS10.3以降が対応のようです。
表示されるのは年に3回まで。
有意の時点で呼び出して、年に3回に達していないと表示されるらしい。
つまり、何回起動したときとか、そういう条件をつけて、レビューの請求をされてもおかしくない、
できれば好レビューが貰えそうな時に表示されるようにするのが良いっぽい。

コードとしてはStoreキットをインポートして使う。

Swiftの場合。

objective-cの場合。

一度この表示が出て評価を送信すると、その後は出なくなるのか、それとも、直後でも呼び出されるとまた表示されてしまうのか、そのへんの詳しい挙動がわからんのでそれなりの対応が必要そうです。

と、ゆーことで、いま手入れしてるobjective-c用にコードを書いてみた。

最初は10回呼ばれたら、その後は100回呼ばれる毎にレビューが請求されます。

あ、バージョンでの切り分けはこちらを参考にしました。
Objective-C で OS バージョン判定を簡潔に行う方法

【Swift4】objective-cからSwiftのクラスを呼び出す。

おぶしーからすいふとに切り替えて暫く経ちますが、古いアプリなど丸っとスイフトに書き換えるのは面倒なので、
objective-cはそのままで、新規クラスはSwiftでと混在させてます。

んで、objective-cからSwiftのクラスを呼び出す時にちょっと詰まったんで備忘録。

参考サイト
Objective-CコードからSwiftのクラス/プロトコルを使う方法(フレームワーク開発編)
Objective-CベースのプロジェクトからSwiftのクラスを呼び出す
SwiftとObjective-Cの相互利用する際の注意

例えば、
hogehogeというアプリがあって、
higehige.h higehige.m というobjective-cのクラスが有って、
hagehage.swift というswiftのクラスがあるとする。

higehige.m で hagehage.swiftクラスを使いたいので、適当にインポートしてみた。

エラーが出た。(´・ω・`)ショボーン

ネットで調べて、-Swift.hを着けたら良いのね!(`・ω・´)シャキーン

あれ?(´・ω・`)

ムキー!なんで通らんのや!/(^o^)\

じっくり調べなおすと、、、「プロダクト名」-Swift.h なのか…。orz

これでよかったようです。/(^o^)\
クラス呼び出すんやからクラス名だと思うやん…。(´・ω・`)

ちなみに呼ばれる側は

のように@objcMembersをつけるか、メソッドの前に @objc をつけておくようです。

他にもハマりどころはありそうなので他サイトも参考に。
うじゃうじゃ。

2018/07/10追記
上記のようにswiftファイルをインポート出来るようになりました。
で、次の記事にあるSEManager.swiftで音を鳴らしたいのですが、
objective-cからSEManager.swiftのメソッドを呼び出そうとするとエラーが!!

SEManager.swiftのplaySoundメソッドは引数があるのでobjective-c側からはplaySoundWithSoundNameで呼び出します。
xcodeの変換サポートでも候補に出るし、問題なく認識していそうなのですが、どーやってもNo visibleのままです。

よくわからないまま試行錯誤を繰り返すこと丸一日、SEManager.swiftのplaySoundメソッドの中にある’throws’を消すと認識されました。
throws,do,try,catchというのはよく分かってないですがAVAudioPlayerを使う時にXcodeからつけろーと言われます。
このthrowsを消すと、別のswiftファイルからplaySoundメソッドを呼び出す所で黄色三角のエラーが出ますがビルドは出来ます。
なんとも明確な解決策が見いだせませんでしたが、とりあえず動いたので良しとしつつ、自分の無能を呪っときましょう。/(^o^)\

could not build module googlemobileads というエラー

Xcodeを7から8にアップデートして、
環境を2009のmacminiから2016のMacBook Proに移行して、
何が原因だかわからんが、ちょっと前に作ったアプリをエミュレーションで起動しようとしたらエラーが出た。
Objective-cで作ったアプリだ。

エラーメッセージはこんな感じ。
could not build module googlemobileads

どうもGoogleMobileAds.hが見つからん的なエラーが幾つか出る。
ぐぐったところimportの書き方を変えてみる的な記事が出てきたがそれでは治らんかった。

cocoa podでインストールしたものを削除して再インストールしてみたらどーかなとやってみた。

参考サイト
CocoaPodsのアンインストール方法 · Yukim Log

podファイルで
pod ‘Async’
だそうだ。

↓podファイル

んでもってターミナルから実行。

ディレクトリは移動しておこうね。ヽ(^。^)ノ

んで、アプリ.xcworkspaceも削除。

再度podファイルを編集

んで、ターミナルから実行。

新しく.xcworkspaceファイルも作られて、エラーが消えました。\(^o^)/

【Localizable.strings】多言語化した後からとか、コードで多言語化。

参考サイトを見てもらったほうが速い。(^_^;)

参考サイト
【Swift】Xcode6でiOSアプリの多言語・ローカライズ対応のまとめ – mzgkworks

、、、だけではよろしく無いので簡単に画像つきで書いてみる。

File -> New -> File…で、Strings Fileを選択する
【Localizable.strings】多言語化した後からとか、コードで多言語化。
【Localizable.strings】多言語化した後からとか、コードで多言語化。

ファイル名:Localizable.stringsとして、Supporting FilesのGroupに追加
【Localizable.strings】多言語化した後からとか、コードで多言語化。

Localizable.stringsを選択して、ユーティリティエリアのShow the File inspectorで、Localize…をクリック
表示されたダイアログでBaseを選択し、Localizeをクリック
【Localizable.strings】多言語化した後からとか、コードで多言語化。

Localizable.stringsを選択して、ユーティリティエリアのLocalizationでJapaneseにチェックをつける
【Localizable.strings】多言語化した後からとか、コードで多言語化。

Localizable.stringsにLocalizable.strings(Base)とLocalizable.strings(Japanese)の2つが追加される
【Localizable.strings】多言語化した後からとか、コードで多言語化。

多言語化したい項目(タイトルやメッセージなど)のキー項目を値を定義する
Baseファイル
【Localizable.strings】多言語化した後からとか、コードで多言語化。

Japaneseファイル
【Localizable.strings】多言語化した後からとか、コードで多言語化。

多言語化したい部分のコードを変更。
NSLocalizedString(@”reviewButton”, nil)

これでiPhoneの言語設定によってローカライズされるはずです。

kCTLeftTextAlignment is deprecated in IOS 9

ちょっと前に作ったアプリを久しぶりに開いて実行したら黄色い三角がいっぱい。

よくよく見ると、
kCTLeftTextAlignment is deprecated in IOS 9
となっている。

kCTLeftTextAlignmentといったコマンドが非推奨になってるようだ。

日本語ページで検索したが、
コマンドがkCTLeftTextAlignment「に」変更されたとゆーページしか無かった。
参考サイト
arudenteのアプリ

再変更されたとゆーことか。
で、英語サイトですぐに答えは見つかった。
参考サイト
kCTLeftTextAlignment is deprecated in IOS 9 · Issue #594 · TTTAttributedLabel/TTTAttributedLabel · GitHub

kCTLeftTextAlignment
kCTCenterTextAlignment
kCTRightTextAlignment
kCTNaturalTextAlignment

これらが、

kCTTextAlignmentLeft
kCTTextAlignmentCenter
kCTTextAlignmentRight
kCTTextAlignmentNatural

に変わったようだ。

割りとビミョーんな変化だがそうせにゃならん必要性がなんかあったんかね。
うじゃうじゃ。

【UIActivityIndicatorView】インジケーターの表示とか。

何かの処理中にインジケーターを表示して他の操作をさせなくしよう。

参考サイト
[iOS]アプリ内課金の金額をあらかじめ表示する – Qiita

まずUIviewを全画面に配置しautolayoutで全画面に入れます。
それに載せるようにUIActivityindicetorViewを配置します。
これはViewに対しX軸Y軸の中心になるようにautoLayoutします。

uiViewはBackGroundをBlackにし、Alpha値を0にしておきます。
UIActivityindicetorViewは、StyleをLarge Whiteにしておきます。

それらをoutlet接続します。

それらを実行するメソッドを作成。
そのまんまコピーですみません。(−人−)

インジケーターを表示したいところで

インジケーターを終了したいところで

とゆー感じで使えるようになると思います。

【In-App Purchase】自分なりにアプリ内課金備忘録の2 リストア

自分用備忘録。
自分なりに整頓。

アプリ内課金のリストアについてはこちらが参考になった。
AT-Sphere: In-App Purchaseにハマる (リストア編)

冗長な感じだがまずはリストアボタンを押されてAlertで確認。

OKを押すと[self startRestore]でstartRestoreメソッドへ。
ココではプロダクトIDをセットして購入の確認に投げる。

次のメソッドで購入済みプロダクトIDを確認してそれぞれ処理。

最後にユーザーにリストア成功を伝えて完了。
あ、これはメソッド分けなくても良かったか。

あ、あと何らかの理由で失敗したら飛ぶらしいメソッド。よくわからん。

こんな感じでどうですかね。
うじゃうじゃ。

【In-App Purchase】自分なりにアプリ内課金備忘録

アプリ内課金。
なんかめんどくさそう。
Appleのサーバとやりとりがどーたら。
ゆーててもしゃないので適当にやってみた。

参考サイト
iTunesConnect アプリ内課金 プロダクト作成 手順 – 散歩しながら 〜〜アプリ開発〜〜
失敗しない iOS In-App Purchase プログラミング – A Day In The Life
頭と尻尾はくれてやる! 初めてのアプリ内課金

課金コンテンツをAppleに預ける – How to implement "Hosting Content with Apple" – おおばログ

前提としてiTunes Connectのアプリで販売する物のプロダクトIDをつくっておく。
とりあえずココでは割愛。

で、まず、前処理としてアプリが課金可能な状態か確認する。

続いて購入ボタンを押してプロダクトIDをセットして購入処理に入る。

プロダクトIDがセットされたらproductRequestに送られる。
よくわからんが、IDが間違ってないか確認してから支払い処理に投げるっぽい。

上記メソッドから自動で下記paymentQueueに投げられる。

うまく機能すれば支払いの確認のダイアログが出てOKすると支払い処理がなされる。

なんかリストア処理も入ってるっぽいので多分大丈夫じゃないかな。
複数の課金アイテムがあると処理がややこしそう。
自分用メモなので違ってたらゴメンね。
うじゃうじゃ。

【UITextView】でテキスト量などで高さを可変にする。

アプリの画面内の説明文で機種による画面のサイズの違いによる高さの違いを吸収したい。
普通はUILabelでするんだろうけど思惑があってUITextViewでやってみたかった。

【UITextView】でテキスト量などで高さを可変にする。

【UITextView】でテキスト量などで高さを可変にする。

次いで、autolayoutでUITextViewに連なるオブジェクトの位置が合わせて変わらなければ意味が無い。
いろいろと調べて試した結果意外と簡単だった。

参考サイトはコチラ。
UITableView上に可変するUITextViewを作る – Qiita
[iOS] AutoLayoutでUILabelの高さを動的に変える : 雑食プログラミング備忘録

まず、UITextViewを配置し、上と左右のautolayoutを設定する。
「高さが決まってないよ!」と注意が出るので、高さをテキストが入る余裕を持って設定する。

UITextViewの下端からマージンを取って下にUIButtonを設置しautolayoutで制約をつける。

そして、UITextViewのプロパティ、Scroll ViewのScrollingのScrolling Enabledのチェックを外す。

【UITextView】でテキスト量などで高さを可変にする。

その後、UITextViewの高さHeight ConstraintのRelationをLess Than or Equalに変更する。

【UITextView】でテキスト量などで高さを可変にする。

あと、編集も選択も出来ないようにしたいのでBehaviorのEditableとSelectableのチェックを外しておく。

こんなんで良いのかな。
うじゃうじゃ。

共有フォルダなどに新しいフォルダ(ディレクトリ)を作る。

参考サイト

[XCODE] NSFileManagerを用いてディレクトリを作成する、ファイルを保存する – YoheiM .NET

NSFileManagerの「createDirectoryAtPath:withIntermediateDireotries:attributes:error:」を用いることで、 ディレクトリを作成できます。だそうです。

参考サイトではcashフォルダに新規フォルダを作ってますがここではDocumentsフォルダに新規フォルダを作って画像ファイルを保存します。

これを実行してiTunesでアプリの共有フォルダを見るとsampleDirectoryフォルダが出来ており、中にsample2.pngファイルが入っています。