2019年1月27日日曜日

AdMobのためにFirebaseインストール

AdMobではAnalytics的使い方しかできないみたいだけど(よくわかってない)、とりあえず使ってみることにした。

CocoaPodsを使う

CocoaPodsってのを使ってインストールした方が良いと、今までもAdMob SDKなどでもさんざん言われてたので、今度それを使ってインストールしてみることにしたが、当のCocoaPods自体インストールしてないので、まずはそれをしなけりゃいかん。

ターミナル使ってインストール

ターミナルからコマンドを打ってインストールするんだが、ほとんどコマンドラインはわかってないので、詳しいことは書かない。
実際、Googleのサイトに書かれた手順ではうまくいかないことがあり、一般の方の解説ブログを参考にインストールした。ありがたや。

Setupが長い

CocoaPodsをインストール後にsetupするんだけど、どうもGitHubから3GB近いファイルをダウンロードするので、数時間かかってしまった。その最中にパソコンがスリープしたら、再開してくれないみたいなんで最初からやり直しになったし(ノД`)
ダウンロード後、自動でセットアップ作業に入るのだが、これがまた長い。何をダウンロードして何をセットアップしてるのかわからんので不安だ。
そもそも3GBもあるのに、機能がライブラリのインストールを簡単にするだけじゃないよね? きっといっぱいおいしい機能があるんだろうけど、とりあえず考えないでおく。
setupが終わって、その後の手順にも従ってプロジェクトのディレクトリに移り、pod init をする。
ここまでにPodfile、Podfile.lockなるファイルも同じ階層に作られると思った。

Podfileを書き換える

途中、以下のように書いてあるもんだからターミナルで何度も pod 'Firebase/Core' って打ったものの、「そんなコマンドはない」とか出て悩んだんだけど、正解はPodfileの中にその行を追加するんだった。知らねえし!
で、この pod 'Firebase/〜' を書き換えたり追加すると、Firebaseの他の機能もインストールできるんだそうな。
インストールするポッドを追加します。次のようにして Podfile にポッドを含めます。
pod 'Firebase/Core'
pod 'Firebase/Core'を追加
そして pod install ってやり、Firebase/Coreの必要ファイルがプロジェクトにインストールする。

これからは.xcworkspaceで

ここまででプロジェクトのフォルダ内に アプリ名.xcworkspace というファイルが作られてると思う。今後は今までの アプリ名.xcodeproj にかわってこれを開いて編集をすることになるそうだ。
.xcodeproj も開けるけど、Firebase関係の書類がインストールされてないらしく赤字で表示される。
CocoaPodsの作業はここでおしまい。

googleのplistをインストール

サイトの手順に従い、AdMobのサイトからGoogleService-Info.plist ってのをダウンロードする。
これを普通にプロジェクト内にAddする。ちゃんとCopyもな。
その後、UIApplicationDelegate内にimportと設定のための一行を追加しておしまい。
あとはAppStoreに新バージョンとして再アップすると機能するようになるんだと。アクセス解析を行うわけだが、プライバシー関係の設定とかしなくて怒られないかしら?

2019年1月24日木曜日

Firebaseってなんだ?

What is Firebase?

アプリの広告にGoogleのAdMob使ってるんだけど、前からFirebaseとリンクしろって出てくる。
Google Analyticsの機能を使い、アプリのアクセス解析をやってくれるらしいんだが、はっきりわかってないんで調べる。

mBaas

FirebaseはGoogleが運営するmBaas(Mobile Backend as a Service/エムバース)。
mBaasとはスマホアプリ向けにバックエンド部分のサービスを担う機能で、以下のようなメリットがあるという。

  • サーバ構築不要
  • サーバ運営不要
  • 低コスト
  • 開発工数削減
  • セキュリティ
デメリットとして、アプリの根幹を任せることになるので、信頼性などはmBaasを提供している企業に左右される。

具体的な機能

  • ユーザの登録とユーザ情報の管理
    • 新規登録を促すことと管理
    • ユーザ間で情報のシェアもできる
  • メール通知、プッシュ通知
    • ユーザ同士での情報のやりとりが可能に
  • 位置情報サービスとの連携
    • 位置情報を使った特定ユーザへのサービス提供など
  • SNSとの連携
    • SNSアカウントでのログインができる

Firebaseの機能

  • インフラの管理不要
    • Analytics、Database、Notifications、Crash Reportingなどが使える
  • Googleのインフラが使える
    • アクセス量や負荷を気にしなくて済む
  • 連携するプロダクトを一つのコンソールで管理できる
    • 詳細な設定なしでも利用できる
    • データやインサイト(なんやろ?)の共有も可能
    • 全プロダクトに一つのダッシュボードからアクセスできる
  • 基本無料で、拡張で利用した情報に応じて料金が発生

具体的な機能

  • Firebase Authentication
    • 安全な認証システム
      • メールアドレス+パスワード
      • 電話認証
      • Google、Twitter、Facebook、GitHubなどのアカウントによる認証
    • ドロップインUI
    • 包括的セキュリティ
    • 10行程度のコードで実装可能
  • Cloud Storage
    • Google DriveみたいなCloud Storageを扱える。無料なら5GBまで。
  • Analytics、Crashlytics
    • アプリの使用状況とクラッシュ状況を管理
……その他、ML(機械学習)やデータベース機能など、いっぱい機能がある。
要するに、今までアプリごと、サービスごとに、どこどこのサーバを借りて、データベース機能使って、アプリの使用状況管理はこれで…、ユーザの認証管理はこれで…ってやってたものがFirebaseとして一現に機能が提供され、管理もできるというのだな。こりゃ便利。

いろいろすごそう、便利そうなんだけど、Googleのサービスってちょっと使い方がややこしいこともあるので、そこは気をつけて使いたい。

とりあえず「いったい何か?」はわかったのでここまで。

参考サイト

2019年1月10日木曜日

アプリアイコンを一括登録しよう

AppStoreで販売する際、XcodeにAppIconを様々なサイズで登録しなきゃいけないのが死ぬほどめんどくさいんだけど、これをアプリを使って解決しようという話。

使うアプリはMacAppStoreのIconKitという有料アプリ。

ここに画像をドロップする
起動すると開くウィンドウに、一番高い解像度の画像をドロップするだけ。今なら元画像は1024*1024のサイズで作っておけばいいな。

画像をドロップしたところ。
 必要な書き出し対象をチェックし、 下のいずれかのボタンを押す。

JSONファイルを作るオプションをチェックすると登録が楽
Previewボタンを押すと一度各サイズのプレビューが見られる。
Save without previewボタンを押すとすぐに保存ウィンドウが開く。
この後の登録が楽になるので、下のJSONファイルも一緒に作るようにしておこう。
アイコンが書き出されるとAppIcon.appiconsetというフォルダと、中にそれぞれのサイズの画像ファイルとアプリアイコンサイズとの結びつきの情報が書かれたContents.jsonというファイルが作られる。

説明を追加
XcodeでAppIconを右クリックしてShow in Finderを選ぶとAssetsの登録先が開くので、今作ったAppIcon.appiconsetで上書きしてやれば、いちいちXcodeにひとつずつドロップしなくても全部一度に登録される。
おしまい!

2019年1月9日水曜日

デベロッパプログラム使用許諾ほかのアップデート

2018年末に久しぶりにiTunesConnect(いつの間(2018/6/4らしい)にか名前がApp Store Connectに変わってた)を開いたら、

  • アップルデベロッパープログラムの使用許諾契約がアップデートされたから確認してちょ
  • 有料アプリケーション契約に新しいバージョンがあるよ
って2件の告知がされてた、英語で。

1件目はiTunesConnectじゃなくてApple Developerのサイトにログインして、表示される指示に従って長ったらしい英文の契約書を読んだつもりになってチェックボックスにチェックを入れ、承諾する旨のボタンを押す。

2件目はたぶん有料アプリをリリースしてる人だけ出てるんだと思うが、1件目の手続きが終わらないと始まれない。
iTunesConnectのトップメニューにある「契約/税金/口座情報」のボタンを押し、有料アプリケーションの行の「アクション」にある「利用規約を確認して同意」をクリック。


たしかこっちも英文で長ったらしい規約が出るので読んだつもりでチェックして承諾。
すると、アクションが「連絡先情報を設定」に変わる。
どうやら開発と販売にかかわる連絡先情報を新たに入れてやらないといけないらしいので、開いて下の方に出てる以下の連絡先を指定する。
良い子ならすでに入力済みの連絡先をチェックして有効にするだけで済むと思う。
  • Senior MAnagement
  • Financial
  • Technical
  • Legal
  • Marketing
最後に、上のメニューにある「税金」「口座情報」「連絡先」を順にクリックして行くと確認済みということになるようで、手続きが終わるようだ。

App Store ConnectとApple Developerを行ったり来たり、相変わらずややこしいね。

2019年1月5日土曜日

タッチしたものが任意のインスタンスか調べる

SpriteKitにはSKSpriteNodeの他にもSKShapeNode、SKLabelNodeなどがあるのだが、タッチしたNode(一番手前にあるNode)がどれなのかを判定したい。
SKSpriteNodeの時だけ何か処理をするとかね。

以下のように is 演算子で比較すればいい。
if target.first is SKLabelNode { }


if let でタッチされたものを as? で調べてもいい。

if let _ = target.first as? SKSpriteNode {
print("スプライトノード")

}

まあSpriteKit以外でも使えるわな。

ついでにインスタンス同士の型が同じかどうかはif 文で比較演算子に === を使えばいいんだとさ。これはまた別の機会に。

一つのコードに複数のUI部品が接続?


Xcodeで別プロジェクトであっても同一ファイル名のコード(ViewController.swiftとか)が同時に開いていた場合、それぞれがどこのプロジェクトに属するのかを明確に区別してくれないようだ。
その状態で同名のIBAction、IBOutletがある場合、コード左の◉を押すと、接続先に同名のファイルがある別プロジェクトのStoryboardのUI部品まで表示されてしまう。(別な方でもOutletとかに接続されている)
だから今のプロジェクトと別な方の参照を選ぶと、別プロジェクトのStoryboardが表示されてしまうという気持ち悪いことが起きる。

ビルド時はさすがにプロジェクトの区別をするので実害はないのだが。

片方を閉じてXcodeを再起動すれば解消されるようだ。(片方を閉じただけじゃ情報が残ってるらしく直らない)
難儀やなあ。

2019年1月2日水曜日

SKLabelNodeの文字を縁取りに

NSMutableAttributedStringクラスを使う。

以下のコードの内、strokeWidthが縁取りの太さになるのだが、正の数だと縁取りだけで中が塗られない袋文字になる。負の値だと縁取り+中の塗りつぶしになる。
strokeColorが縁取りの色、foregroundColorは中の塗りつぶし色。

let borderText = NSMutableAttributedString(string: "縁取る文字")
borderText.addAttributes([NSAttributedString.Key.strokeWidth : -2.0,
NSAttributedString.Key.strokeColor : UIColor.black,
NSAttributedString.Key.foregroundColor : fontColor,
NSAttributedString.Key.font : UIFont.systemFont(ofSize: 64.0)],
range: NSMakeRange(0, borderText.length))
labelNode.attributedText = borderText

注意点

同時にSKLabelNode.textに普通にcolorを設定すると、そちらが優先されたりされなかったり、挙動がおかしくなる場合がありよくわからない。
要するに両方同時に設定しないほうが無難。

また、SKLabelNodeの.textと、NSMutableAttributedStringのstringは別物になる。

SKLabelNodeの色を変える

UILabel同様にSKColor()のメソッドで色を指定する点は一緒。

その後、colorBlendFactor という色の濃さのプロパティを指定してやらないと思い通りの色で表示されない。(白で表示されてしまう)
alpha値同様、1.0が最も濃い。
labelNode.colorBlendFactor = 1.0

めんどくせえな。