2019年3月30日土曜日

MMDの3DキャラをSceneKitに表示させたい

WindowsにMikuMikuDance(MMD)ってアプリがあって、3Dキャラをアニメーションで踊らせたりできるわけだが、そのキャラをiOSのSceneKitに表示してみたいと考えた。
特にARKitを使ってけものフレンズのサーバルちゃんとかを室内に表示させたり。

調べてわかったのが以下のやり方。
Blenderとadd-onがダウンロードできるアドレスは自分で調べてください。

  1. 3DソフトBlenderとadd-on機能を使って、MMDの.mmxファイルをiOSで扱える.daeフォーマットに変換。
  2. Xcodeプロダクトに変換したdaeファイルをAdd。
  3. ARKitのサンプルコードを使って表示。

1:.pmxファイルを.daeファイルに変換

Blenderとadd-onのプラグインをダウンロードし、以下のBlenderの設定フォルダにプラグインを入れる。
Macintosh HD⁩/ユーザ/(⁨ユーザ名)/ライブラリ/Application Support/Blender/(アプリのバージョン。たとえば2.79)/scripts/addons 

しかし、アプリ起動しただけじゃ設定フォルダが作られないらしい。File / UserPreferences... でウィンドウを開き、Save User Settingsを押すとできるようだ。それでもプラグインをしまうscriptsフォルダ以下ができないみたいなので、自作することになった。scripts、addonsと複数形なので間違えないように。

‎またそのフォルダに入れるのはblender_mmd_tools-masterフォルダ内のmmd_toolsフォルダ以下だけ。
BlenderのUser Preferencesウィンドウを開いてAdd-onsのObject:mmd-toolsにチェックを入れると、.mmxファイルのインポートができるようになる。

.daeにエクスポート

拡張子.daeは正式にはCOLLADAっていうんだね。
エクスポート時は対象となるオブジェクトを選択し、以上のようにいくつかボタンをチェックし(チェックを外すのも)、コンボボックスからレンダーを選んでから行う。

2:プロダクトに.daeファイルをAdd

.pmxファイルをインポートし.daeファイルにエクスポートしたら、それをXcodeのart.scnassetsフォルダにaddする。
.daeファイルだけでやっている人がいたのだが、それだけだと当然テクスチャーが表示されない。しょうがないのでテクスチャーその他を含んだフォルダごとaddした。
その状態でその.daeファイルを選択すると、ちょっと時間がかかるがXcode上に3Dキャラが表示される。
もしその中にrigidbodiesというカテゴリができていたら、いらないらしいので削除しちゃっていい。
表示はすごく拡大されて歪んでるので、scaleなどを調整してやらないといけない。

保存できない問題が

.scnファイルをいじった後、RunやSaveしようとすると
The document “serval.dae” could not be autosaved. Your changes will not be saved until the problem is resolved.
などと出てなぜか保存できないことがあった。

どうやらHomeフォルダ以下のPermissionがおかしくなってたらしく、以下の2つのサイトを参考にPermissionの修復をしたところ、無事に保存できるようになった。
Homeフォルダ以下全てのファイルを修復するようなので、結構時間はかかる。
https://forums.developer.apple.com/thread/109669#335313
https://support.apple.com/en-us/HT203538
うちの環境だけの問題かもしれない。
EditorメニューのConvert to SceneKit scene file format (.sce) を選んで.scnファイルに変換する。 

2019年3月26日火曜日

Swift5が出た

Xcode10.2が出て、Swiftが5になったので、気づいた点だけまとめる。
(ついでにiOS12.2になってmacOS 10.14.4もリリースされた)
他にも色々あると思うけど、難しい使い方しなきゃあんまり使わないのもあると思うので。気づいたら追記します。

気づいた変更点

#のリテラル

" "だけでなく、# #で囲うことで、\ なしで " などを文字列の中で扱える。
書き方によってはスッキリするってことかな?

let a = "new"
var str = #"Hello, "the" \#(a) world"#

結果は
Hello, "the" new world
になる。

isMultiple( )

これまでは%で余りを求めることである数の倍数かどうか調べていたが、今後は .isMultiple()関数 で置き換えることができる。
以下の2つの結果は同じ「割れる」になる。

let ans = 10
if ans % 2 == 0 {
print("割れる")
} else {
print("割れない")
}

if ans.isMultiple(of: 2) {
print("割れる")
} else {
print("割れない")
}

2019年2月25日月曜日

SpriteのuserDataの使い方

SpriteNodeのカスタムプロパティとしてuserData辞書がある。
使い方は普通の辞書と一緒だが、あらかじめ最初にNSMutableDictionaryとして初期化しておかないとダメ。
そうしないと値を入れたはずなのにnilを返してくるため、悩むことになる。
あと、いちいちoptionalとして?とか付けないといけないのはめんどうだな。

spriteNode.userData = NSMutableDictionary() //最初に初期化が必要!
spriteNode.userData?["nodeID"] = NSNumber(value: cardIndex)

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を行ったり来たり、相変わらずややこしいね。