日本のSceneKitの原点

Bontourou1

 お盆に的を絞ったiOSアプリ、ver.1はほぼほぼ完成で、あとは公開申請に必要なマーケティングサイトを整備すれば終了です。
 このアプリについての詳細はAppStore公開時に改めて書くとして、今日はこの核となった技術のAppleのSceneKitというフレームワークについて。

 今回のアプリには3D技術が必須であるとはわかりつつ、swiftの知識も今ひとつなのに、さらに3Dなんてなぁ、と遠い目で途方にくれること数年。
 とりあえずSceneKitというフレームワーク(3DCGライブラリ)がiOS上での3D空間開発に必須というのがわかり、いつものようにジュンク堂へ。 というか、それ以前にネットでも書籍検索をし、日本語で書かれたSceneKitの参考書がないことは薄々わかっておりました。 そして案の定、頼りのジュンク堂でも発掘できず。

 これにはiOS開発言語がここ数年でObjective-Cからswiftへと徐々に、しかし確実に移行しているのも原因の一つで、書棚の下の方にデッドストック的に残っているiOSの3Dやらゲーム関連の書籍はObject-Cベースのものばかり。 さりとて出版業界も今さら全面swiftに対応した改訂版を出す気もないようです。 たぶん、もう多数の素人がXcodeを立ち上げてiOSやらのアプリを作る時代は終わったという(商売にならない)との見切りもあるのだと想像します。
 
 Appleは盛んにデベロッパー参加を煽り、日本の小学校でもプログラミング教育が始まろうという昨今ながら、戦場は先鋭化したプロしか売れるアプリが生み出せないほど高度化しているという乖離が透けて見えます。(売れるアプリを作れるプログラマーを養成しようっていうだけじゃないのはわかっていますけど)

 ま、それはさておき、日本語で書かれた専門書がないのは辛い。 と改めて具体的なキーワードでネット検索すると、はてなで全編90回に渡るSceneKitの解説記事を発見。 あまりに膨大すぎて題名をエクセルで別途管理しないと大変、なんて罰当たりなことを言ってしまいそうなほどの貴重な資産です。 本当にありがとうございます。

 読み進むうちに、SceneKitにはSceneEditorというのが用意されていて、GUIで3D空間を用意できることがわかり、これが先日書いた、たった数時間の自習時間の監視で大きく開発が進んだ理由でもあります。
 といっても最終的にはそれらのシーンをswiftで繋ぐのに苦労するんだけど、それすらネットの他の方の記事を参考に確実に乗り越えることができました。

 WatchOSの開発時にも同じくネット上の先人にお世話になりましたが、あれも紙じゃなくてKindleベースでしたっけ。 いやほんと、今更ながら改めてデジタルの恩恵を再確認した次第です。

| | コメント (0)

AppStoreで異なるバージョンのアプリを共存させる

 うん、Appleのアプリを開発してる人じゃないと全然意味が通らないタイトルだ。
 
 今回のAppleWatchアプリのアップデートは、Watchがシリーズ4となったことが発端でした。 一方で、最も古いWatchではこのシリーズ4用にアップデートしたバイナリは動きません。
 シリーズ1〜3は多分両方が動くんじゃないかと思いますが、残念ながら現物もなく、Watchを震わせるエンジンはシミュレーターでは限界がわからない、つまりあまりテストの意味がない。 よって、最も古いのと取り敢えず現時点で最新のバージョンをAppStore上で共存させたかったのです。

 AppStoreへの言わば業務用入口となるAppStore connectに新しいアプリをアップロードするとき、まずはマイAppから+ボタンを押して新規Appの項目を作らなくてはならないのはご存知の通り。
 ここに「バンドルID」という項目があり、結論から書くと、これがAppStore connectが、アップロードされたバイナリが新規なのかアップデートなのかを判断する根拠となります。
Con1 
 でも、はて? バンドルIDって何だったろう?って思いますよね。 それを助けてくれるのが、この「新しいバンドル ID を Developer Portal で登録します」という一行。
 ここのリンクをクリックすると、突然Appleのデベロッパーサイトに飛ばされます。

 ここが非常にわかりにくくて苦労したのですが、答えとしては、左のサイドバーの「Identifiers>App IDs」をクリックすると、自分のXcodeで作ったアプリのID、つまりバンドルIDがずらりと出てきます。 つまり、このデベロッパーサイトは開発者のXcodeとも裏で繋がっているのです。 あなおとろしや。
Con2


 今回のWatchアプリの場合、シリーズ4用と言っても、初期型の言わば別名保存版ですから、IDは同じ。 これを見てAppStore connectはアップデートと判断します。
 よって、今度はXcodeでTARGET>General>Bundle Identifierあたりを別の名前にすることで、上の「新しいバンドル ID を...」云々で別アプリとして登録できる、ということがわかりました。
Con3
 Swiftやそれ以前のobjective-Cを含むXcodeの情報は多数ネットにあるのに比べ、このAppStore connectを含むアプリ管理に関しては希薄で、やっとプログラムから解放された後の疲れのだめ押しをされます。

| | コメント (0)

AppleWatch用メトロノームアプリ、シリーズ4に対応

Main_icon_round_ol やっとBeat on WristというAppleWatch用アプリがシリーズ4に対応しました。
 
 シリーズ4から要求OSのバージョンが上がり、それまでのが動かなくなっているのはわかっていながら、Xcodeの持病的バグである"signal SIGABRT"に苛まれて今になったという理不尽さ。
 おかげでAppStoreにネガティブなコメントがついてしまいました。
 
 ま、それはさておき、今回、初代AppleWatch用に最初のバージョンをStoreに残したままにすることにしました。 が、実はこれが難しく、普通にXcodeからApple Connectにアップロードすると、どうやってもアップデート、つまり先代(無印だけど強いていうならver.1)を置き換えようとします。
 いやいや、それじゃこまるんだって、とあれこれやって、新旧バージョンを両方残した、という話はまた改めて。
 
 でも長い間気になってたことが解決してすっきりしたわ。 ビールもうまい。

| | コメント (1)

Timerクラスとバックグラウンドの面倒

 ま、やっぱり私がすることだもんなぁ、そんなに上手く行く訳がないさ。
 テストしていた孤立校舎のチャイムアプリ、バックグラウンドに回ったら動かないことが判明。
 
 え?と思って調べたら、そうか、Timerを使っている限り避けられないのか、と今更になって納得。 簡単にいうと、このクラス、アプリがバックグラウンドに回った途端に動作が止まるしまう仕様なのです。
 以前AppleWatchのアプリでも苦労したにもかかわらず、再びドツボにはまったのかと、自分の思慮と知恵の浅さに呆れるばかり。
 
 そもそもなんでswiftというかAppleのOSはことごとくバックグラウンドでのアプリの動作を制限したがるのかというと、単なる横着とは責められない面もあります。 曰く、バックグラウンドでフォアグラウンドと変わらない動作を提供すると、例えばキーロガーなんてのがこっそりやりたい放題になる、つまりはセキュリティ思想が元になっています。
 
 とはいえ、多くのmacOS市販アプリは裏に回っても普通に動いていますから、当然回避策はあります。 ただ、ネットで出てくる対策は、対象がiOS,macOS曖昧で、かつ非常に難解。

 そこでポンコツな私は思案した。
 このチャイムアプリは私の勤めるたった一つの校舎のたった二つの教室でしか使われません。 しかも使用するのは教師のみ。(最悪私のみ) 一方で、すでに授業は始まっており、完璧を求めて長い時間を費やしている場合ではありません。
 しかも今はXcodeからAppStoreを経由せずともローカルでアプリの生成が可能。
 
 そうだ、クソで良いんだ。
 いや、良い訳ないんだけど、良いのだ。

 そう決めたら、話は早い。
 Timerを使わず、while(repeat while的なもの)で毎秒時間を拾い、条件が合えばチャイムを鳴らすように改造。 えっ?と思われたそこのあなた。 プログラムのエキスパートですね。
 そうです。 whileは無限ループへの近道と要注意の超初心者技法。
 確かに一旦動き出すと、チャイムに関しては期待通りの働きをするものの、レインボーカーソルぐるぐる、quitも含めて後は一切の入力を拒否します。 つまり明確に無限ループしてる、と。

 ただ、それを予想してこちらも速度制限目的のsleep()を一秒毎にかませたため、cpuの限りループすることはなく、半日稼働させてもアクティビティモニターでcpu/メモリ負荷共、全く問題はないことを確認。

 アプリの終了すらできないので、Command + option + escで強制終了するしかありません。
 でもきっちりと期待した通りにチャイムは鳴っている。 仕込んだイースターエッグも息災だ。
  
 とりあえずはこれでええやん?
 教員、下手すると私しか使わんやん?
 コンピューターが人の役に立ってるやん?
 
 ほんと、クソアプリでごめんなさい。
Shotofchime_1

| | コメント (0)

macOSアプリ初挑戦

 うちの学校に新学期に向けて新たな校舎が建設され、どこのコースがどう使うんだろうと思ってたら、なんと我々グラフィックデザインが使えることとなりました。 何はともあれ、新しいことは悪くありません。

 校舎規模そのものが大きくないのでエレベーターはガラ空き、仮に誰か乗っててもみんな顔見知り。 廊下の照明やらトイレやらは全て人感センサー連動で、当然ヒーター、ウォシュレット完備。 手洗いも自動&エアタオル付き。

 が、本校舎から離れているのでチャイムが鳴らない。
 そこで、教師用のMacで簡単に鳴らせないかとみてみたら、これが案外できなかったりするのに気づきました。 毎日決まった時間になんらかの音で授業始まり・終わりを教えてくれるだけで良いのにね。

 PHPをどこかのサーバーにあげて、とも考えたけど、ブラウザを常に立ち上げておかなくてはならないのは色々不便。 てことは、macOS上で動くアプリを作って、ログインしたら自動的に立ち上がるようにすれば良いのかぁ、とまではすぐ思いついたけど、これまでiOSとwatchOSでの開発(ってな大層なもんじゃ無い。単なるポンコツプログラミング)ばかりで、Mac本体で動くmacOSアプリは未経験。

 ただ、やらなければならないことは単純だし、不特定多数に使ってもらうための配慮、例えば好みの時間を入力して保存するなどは不要なので、なんとかなるかも、とも考えました。

 んで今は丁度、日雇い殺しの十連休。 その空き時間を利用して、ではありません。 実はこれが幸か不幸かほぼすべて出勤。 しかし出勤しても仕事はほとんどなく、全く鳴らない電話の番と留守番のみ。 目の前にはMojabeで動くiMac。 そしてこの間何をやってても良いという、拘束なのか非拘束なのかよくわからない時間を過ごしています。

 そこでこのマシンにもXcodeをインストール。 やっとXcodeのくそ持病から回復したwatchアプリの仕上げをしながら初macOSアプリの開発も始めました。

 とは言っても、終わってみると実はwatchOS→iOS→macOSの順で簡単になるんじゃね?というのが正直な感想です。 気になったのは、ネット上にあるSwiftに関する記事の多くがiOSに絡んでいることくらいで、実際、フレームワークをインポートする際に「そんなものはない」と警告が出て気づきます。
 
 中身はというと、watchのメトロノームでも使ったTimerという機能を使って時間をチェックし、switch文が指定時間に適合したら音を鳴らす、という、「夏休み子どもプログラミング教室♪」なんてのに丁度良い程度のヌルさ。 未だに把握しきっていないdeligateなんて一切使っていません。
 鳴らす音はGaregeBandで作ろうかとも思いつつ、結局はフリーの英ビッグベンの鐘の音を拾ってきました。
 
 あらかたXcodeで試した後、AppStoreを経由せずに直接アプリをローカルに書き出して現在テスト中。
 これで問題なければ連休明けから実際に授業に使えるってもんです。
 
 ちなみにそれ以外の機能は全くないので、見た目はこんな感じ。 でも生成されるabout画面はちょっと一人前の気分。
 
 と思ったら? おや?
Shotofchime

| | コメント (0)

Xcode10の怠惰

 三ヶ月ほど前、自作のメトロノームwatchアプリがAppleWatch4で動かないことが判明。
 あぁそうか、Watch4はiOS 12、watchOS 5を要求するんだったけ、と気軽にXcode10を立ち上げてみたのが地獄の始まり。
 今まで通りビルトまではできるのに、Watchのシミュレーターでアプリが立ち上がりません。
 
 Xcodeのデバッガでは「Simulating crash: Condition failed:"NO". Couldn't instantiate class」と出て、そのあとに自分が作ったエクステンションの名前が続きます。 が、メインのエラーメッセージはあの呪いの「signal SIGABRT」。 そう、むしろswiftの文法エラーの方がありがたいという厄介もの。 Xcode遣いを悩ます何が何やらわからんエラーです。
 これはいわばXcodeの非常に原始的とも言えるバグみたいなもので、今回はXcodeのバージョン10にしたことが直接の原因、ネットを見ても多数の症例と解決策があるものの、どれが自分のトラブルに有効なのかわからない。

 あまりにも意味不明なので、GSの深夜バイトも含めて時々立ち上げては解決策が見つからないというのが約三ヶ月続いて半ば諦めモード。 でもこれで諦めるのも癪に障るし、今後のトラウマになること間違いなし。
 んで、今度は昼間に二日ほどじっくりと(いや、他の会社で仕事中だったんだけどね)時間をかけてあれこれやってたら、プロジェクト名を変更するという海外の情報が半分役に立ちました。
 半分、というのは、名前を変えてみたものの、それを元にした各種ライブラリの名前が違うというトラブルが出て失敗。 何じゃそれ、と落胆しつつ元の名前に戻したら、signal SIGABRTが消えました。

 何じゃそれ〜〜〜〜〜〜っ! 三ヶ月の苦労はなんやって〜ん!
 
Project_name いや、世界のApple系開発者はこんなヘボなフレームワークを使わされているんだと思うと思わず涙目になってしまいます。
 アップルのサイトでは子供や女性をプログラム開発に招き入れる様々なイベントやら取り組みが超ハッピートーンで紹介されていますが、あれを見るたびこのsignal SIGABRTの低次元爆弾のことを思い出してしまいます。
 
 あ、この解決策、たまたま今回のsignal SIGABRTでは正解だっただけで、原因&対策は千差万別であることを覚悟してください>藁をもすがる気持ちでここに辿り着いたXcode難民の方々

| | コメント (0)

iOS「うっかりアップデート」の惨劇(2)

>>そして、これでも惨劇は終わらなかった...

 と、書いたきり、地震があってそのままになっていたこの話。 結果として、すっきりしていません。 要するにiOS 11、watchOS 4ともに快適ではないのです。
 
 何よりwatchOS 4のおかげで第一世代Apple watchが重い重い。 あまりの重さで手首をあげても文字盤が表されないこと数多。 これじゃなんのための腕時計かわからない。
 最悪は、最も愛用していると呼んでも良いTextwell、iPhone側で買い物メモを更新しても、リアルタイムにwatch側に反映されなくなって、その度にwatch側でアプリを再起動すなければならない羽目に。
 watchOS 3の時は全く問題なかったので、OS周りの変更が原因であるのは明らか。 逆に現時点でもアップデートされてないということは、開発元はすでにやる気がないのか... これ、有償アプリなんだけど...
 
 日々の使い勝手でいうと、iPhone上のビデオ再生アプリが劣化。
 以前は途中で再生を中断した場所を覚えていて、次回そこから再生できることはもちろん、おそらくiCloud経由でその情報が継承されて、次にMacのiTunesで再生しても再生中断した場所を覚えていました。 が、これも抹殺。 しかもデフォルトで横位置再生されていたのも死滅。
 
 ずっとiOS 11を忌避していた所以であるストレージ化アプリは、とりあえずAir Share Liteというのを入れていますが、慣れないこともあって、なんか昔のUSBメモリで良いか、という気になっています。 もちろんこれはこれで遺失の危険性があるのですけどね。

 結論としてwatchOS 4になってよかったことは一つもなし。
 そしてiOS 11のメリットは、10時代によく使えなくなっていたAirDropが改善されたことのみ、です。

 あ、題名の惨劇の続きでしたね。
 普通のユーザーならこれで終わりなんです。 が、ポンコツながらデベロッパーなわけで、iOSとWatchOSのバージョンが上がると同時にそれらの開発フレームであるXcodeも対応版にアップデートしなければならなくなります。 でないと一切自分が書いたアプリやステッカーに触れられなくなります。
 で、こいつが第二の惨劇の始まりで、最新のXcodeである9.4をインストールするには今度はMacOSをSierraから10.13であるHigh Sierraにアップデートしなければなりません。

 うがーーーーーーーーーーーーーーーっ!
 
 まぁ、ここらあたりは一般のユーザーにはあまり関係ないので詳細は省くとして、とにかくこれらのアップデートにもアホほど時間がかかります。 i7 + SSDでもうんざり。
 で、普段の使い方ではHigh Sierraになったからといってなんてことはなく、相変わらず時々完全フリーズするし、プリンターは登録できないし、健やかに動いていたFlash CS6も首を絞められました。
 そしてまた今年もデベロッパー登録料の更新の知らせが来ています。
 
 定期的に押し売りよろしくiOSのアップデートを迫り続け、酔ってタップする場所を一箇所間違えたら最後、これだけの非生産的行動の連鎖を強制されるAppleのOS構造。
 これをもし秋に正式発表されるiOS 12でやっちまったら、決して安くなかった初代Apple watchが単なる子供のおもちゃ腕時計になってしまいます。
 
 こういう会社が偉そうにUIだとかUX,UDを語っても片腹痛い。
Xcode

| | コメント (0)

WWDC 2018

 いやぁ、散々期待させておいて、ハードウエアの発表はウォッチのバンド以外何一つありませんでしたね。 いえいえ、直前にそうリークしていた情報もあったので、勝手に期待していた方が悪いのですが、無理してライブ視聴しなくてよかった、とほくそ笑んだ腹黒な朝でした。
 噂の◯◯が出たらどうしよう、とか、いやいやサプライズで△△のSr.4が出たら、お金が〜〜〜っ!との妄想も杞憂に終わりました。
 いえ、切実な問題として、使用しているiPhone 5sのバッテリー劣化が深刻化しているので、SE2は本当に気になるんですけどねぇ。

 一方で、WWDCらしいOSの話として、iOS 12が、なんと5年前発表の我が5sすらもカバーするという破格の扱いで、しかも古くて遅いマシンほどキビキビ動くらしく、おお、久々にOSというか、これはプログラミングの勝利じゃ無い?
 が、すぐにそれとセットになるWatchOS 5は、私が使用している初代をサポートしないというちぐはぐぶりがわかって、あぁ、やっぱだめだわ、こいつら、とも。

 ギズモードにも書かれていますが、ゴールドボディに200万円出させた初代を、こうもあっさり切り捨てる態度って、所詮シリコンメーカーに時計マニアの心はわからないよね、と軽蔑されるだけなのにねぇ。(あ、いや、私のWatchは最廉価のアルミです)

 というわけで、最近Xcodeすら立ち上げなくなったポンコツデベロッパーとしては、32bitアプリの関係もあって、iOSは10、WatchOSは3のまましばらく続けそうです。
 いや、改めて言うけど、iPhone 5sのバッテリー劣化は進行しているですけどね...

| | コメント (4)

このダウンロード数が不気味

Download

 え〜、あまり馴染みのない絵でしょうが、これがAppsストア上の自分のアプリケーションがどれくらいダウンロードされているか、あるいは売れているかの管理画面です。
 
 で... ここ一週間ほどの数字が尋常ではないのです。
 ピークであった8/25では総ダウンロード数225!
 内訳はAppleWatchをメトロノームにするBeat on Wristと、TANU2というiMessageステッカーのみ。 Beat on Wristは公開後から通算で990、TANU2は737ダウンロードという凄さ。
 いや〜、これ単に数字が上がって嬉しいというよりも、何かおかしいというか不気味であります。 言っちゃなんだけど、それほどの出来ではないと作者が自信を持って(?)言い切れますから。 あと、ダウンロードのほとんどがアジア太平洋、恐らくは全て日本だと思われるのがまた怪しい。
 
 怪しい裏機能を入れた覚えはないので、仮に何か悪巧みに使われたとしても関係ないのですが、なんとも不思議な感じです。
 
 あぁ、でもこれらが全部有料ならなぁ、とつい計算してしまう浅ましさよ。
 無償の"2"ではない有料版"TANU"は一切売れず...

| | コメント (0)

こんなswift3本に出会った

Swiftbook 先の話に出て来た新しい参考書がこれです。
 著:諏訪悠紀 「iPhoneアプリ開発講座 はじめてのSwift」
 
 もちろん現在市販されているswift3本を全て比較した上での話ではなく、毎年新年度前にいくつかの出版社が共同で行う新しい教科書の展示会的なイベントで参考資料として手にしたものです。

 iOSアプリ参考書には大きく分けて三つのカテゴリーがあって、まずはswift3、そしてXcode、意外なところでAppのアップロードや管理を行うiTunes connectの利用方法です。
 で、実はそれぞれが三冊の本に分かれてもおかしくない程の深さなんですが、さすがにそれではまずいので、大方はこれら三つをまとめている本が多いようです。
 
 個人的にはまずはXcodeの基本は使えないとどこにも進めないので、そこは最初かな、と。 で、出版社的には「絶対できる」「必ず成功」なんてコピーを帯に奢っている関係上(読者からのクレームも怖いので)、「とりあえず以下のコードを指示されたところに書いてね。場合によってはダウンロードサイトもあるよ」とサポート。 最悪でもビルド>ランまでができるようになっています。
 が、これでは確かに動くけど、これで満足するのは今や小中学生くらいで、実際に何か新たにアプリを作りたいと思っても無理。

 結局、そこからはswiftを学ぶことになるのですが、これが難解というか、少なくとも「初心者でも大丈夫」なんてレベルではないし、今時そんな言語が世界のトップマーケットでアプリを生み出せるわけがありません。

 そんなときに出会ったのがこの本。 分量的にはswiftの解説が多く、記述もわかりやすいかな、と。 わがままを言えば、例えば一つのボタンが押された時のコールがアプリ内をどう流れるのか具体的にわかるような図示があれば満点でした。
 もちろん、これを読み終わったからといって、私自身が一番理解に苦しんでいるdelegateを他人に説明できるほどは分かっていないものの、分量的にはiOS関連ではあまり見かけない記述まで説明してあって、今後読者が成長した時にも十分頼りになる解説ではないかと感じました。

 一方で具体的なiOSアプリ制作例は、既存とほぼ似たようなもので、さらにiTunes connectについてはほとんど触れられていませんので、ここに期待する人は別の本も併せて入手された方が良いでしょう。

 話は逸れますが、上記三つのカテゴリーの他に、是非に日本語で読みたいカテゴリーがありまして、それはAPI解説書。
 泥縄的には使っていますが、先の発言にもあるように、AVAudioPlayerとAVFileAudioPlayerといった類似のAPIをどう見つけて、どう使い分けるか、というのがすっと手に取ればわかるような辞典的なものが欲しいです。
 もちろん、Appleのデベロッパーサイトに行けばリストはあるものの、経験的にこういうのは「え〜、これはどうだったけ...」とパラパラ本をめくった方が効率がいいような気がします。 このhyperTalkやLINGO本みたいなの。
 
 さて、次はどんなアプリを作ろうか...

| | コメント (3)

より以前の記事一覧