超お父さんの日記

日記とか雑談とか、スノーボードとか、サーフィンとか、たまに技術系とか。

iOS13 だとUISliderのTrackImageにセットした画像がバックグラウンド復帰時になくなってしまう?

UISliderの

setMinimumTrackImage(image, for: .normal)
setMaximumTrackImage(image, for: .normal)

で画像を設定し、こんな感じの表示にしてました。

f:id:hirokim412:20200213123816p:plain

これが表示される画面で、ホームボタンを押して一旦バックグラウンドにし、 アプリアイコンタップ等でフォアグラウンドに戻ってくると、、、

f:id:hirokim412:20200213124103p:plain

設定した画像がなくなってる・・・謎っ!!

iOS12のシュミレータだと発生せず、iOS13のシュミレータだと発生しました。

こういうの嫌だな〜と思っていたところ、 ちょうど他の画面でもUISlider使ってて、そちらでは発生せず。

これは、、と思ってコードやらインスペクタやら見比べてまくったところ、 発生する方のUISliderのインスペクタには 'Min Track' と 'Max Track' のカラーがデフォルトじゃないという違いを発見。

f:id:hirokim412:20200213124535p:plain

ここのカラーをデフォルトに戻したら直りましたとさ。

しかしiOS13からこの挙動って、、、バグなの?正しい挙動なの?

iOSのSandboxテスターアカウントのパスワード

久々に課金周りの設定をしていたら、Sandboxテスターアカウントのパスワードで一瞬ハマったのでメモ。

f:id:hirokim412:20200116160915p:plain

表示されてるエラーの内容では謎だったけど、要はもっと複雑にしろって話だった。

ストアカウントだし、パスワードは複雑にして忘れるのが嫌だなと思って

tester001

と単純なものにしてたのを

Test_001

にしたら大丈夫だった。

これでも十分に単純だと思うけど。。。

スノーボードのターンの自分なりのコツ

ターンの調子にバラつきがあって、トゥサイドが良い感じの時はヒールサイドを見失っていたり、その逆だったり。

 

それがここ数シーズン安定してきて、見失う幅が小さくなってきた気がするのだけど、家庭の事情でこれから行ける回数が大幅に減る可能性があって、また見失う前に書き留めておこうと思う。

あ、ターンと言っても色々あるので、ここでは比較的荒れてない斜面をロング、あるいはミドルの所謂カービングターンをする場合を想定する。

 

ちなみに自分のレベルはスノーボードは18歳から始めて、少なくてもシーズン20日くらいは滑ってるはず。年々その数は増えていて、先シーズンは59日だった。

あとだいぶ前だけどJSBAの検定1級までは取ったことはある。イントラになるつもりも無かったので、その先には進んでいない。

昔は手摺狂会の相内康夫会長とか、一般人グループの地擦馬鹿一代の動画に興奮してグラトリに明け暮れていた。

ある時からターンの奥深さを知ってターンが面白くなってからは、フリーランメインになり、いろんな山のBCにも行くようになった。

ここ数シーズンは知り合いのツテで知った北海道のニセコ界隈を滑っているダウンチルの人達の滑りに割と影響を受けていて、あの気持ち良さそうなライディングに憧れている。

 

 

検定とか受けるとJSBAのスノーボード教程という教科書を必然的に知ることになり、そこにはターンの種類とか内倒だとか角付けだとか専門用語が出てきて、なんともイメージしづらい説明で、あれを読んで頷ける人はもう既にそれが出来てる人に限られる気がする。

あれを読んで上手くなるのは難しいと思う。

 

本や雑誌を読んだり、プロやイントラと滑って教えてもらったりしても、やっぱりそれは滑れてる人目線のアドバイスだったりして、滑走能力が近いレベルじゃないと理解が難しいことが多いと思う。

あと、人によって教え方が違ったりするのがまた厄介で、本質的には同じことを言っているのだけど、表現の方法が人それぞれで、いろんな人に教われば教わるほど沼にハマっていったりもする。

自分ができるようになると、この人とあの人は違うこと言ってるけど、要はこういうことか、などと理解できたりするのだけど。

 

やはりというか、当たり前なのだけど上手くなるためには、上手い人達と滑ったり、教えてもらったりして、それを踏まえて自分で試行錯誤しながら滑りまくるしかないと思う。

 

ということで、以下のリストは自分が今までの経験から自分なりに腹落ちした感覚なので、これを見たからといって他の人がどうなるかは知りません。

 

基本姿勢

これが一番大切。

これが出来てないと板にしっかり力を伝えられない。

自分のビンディングの角度は前24°、後0°(もう少し前に振ってもいいかも)

 

ビンディングつけて板の上に立って、顔の向きは常に板の進行方向。

体というか骨盤?は前向き過ぎず、横向き過ぎず、斜めくらい。

そして上半身を軽く被せるようにする。前の腰をクイっと少し上げる感じにするとしっくりくる。視線を落とすと、自分の顎の下に前膝があるくらいが丁度いい。

 

両足は膝を内側に回し入れて内股のようになる。結構力がいる。ずっとこれで滑ってると腿がパンパンになるけど安定する。漫画「グラップラー刃牙」の愚地独歩がしてた「三戦(サンチン)」と似ている。

 

姿勢を低くして滑る時は、両膝(特に後ろ膝)を曲げて上半身を被せていく。胸と膝が当たるくらいが一番低い姿勢になる。

あと顔はしっかり前を向くこと。低い姿勢になると顔が下を向いて目線だけ前を向いてるような感じになりがちだけど、顎を上げて顔面を進行方向に向ける。

 

姿勢の高さは滑っている中で常に上下するけど、上下動の際でも常に顔が板の幅に収まっている状態、なんというか板に対して垂直に上下するので視界の上下だけが変わって、左右は動かない感じ。

ターンの途中とかに目線だけ下に落として、板の面と垂直になってるか確認するといいと思う。(特にヒールサイドターンの時)

  

トゥサイドターン

ヒールサイドターンの後半で次のトゥサイドターンのピークをどこにするかを決めて、開いた上半身を骨盤ごとそのまま斜め前に持ってくる感じ。後ろの手(というか肘かな)を板の斜め前、ノーズ横くらいの雪面に近づけるイメージでトゥサイドターンに入ると、しっかりとエッジが入って気持ちいいターンができる。

重心は板のセンター、もしくは後ろよりでも面白い。

目線は常に進行方向か、切れ上がるターンの場合は切れ上がりたい場所を見る。

(後ろから滑ってくる人に注意) 

 

ヒールサイドターン

 トゥサイドターンと同じで、トゥサイドターンの後半で次のヒールサイドターンのピークを見定めて、ヒールサイドターンに入る。

いきなり上半身は開かずに、感覚としては後ろの肩を残しつつ、板に対して垂直に姿勢を低くする。

前の手で板の斜め前、ノーズ横くらいの雪面を触りに行くような感じ。

そして前足を伸ばすイメージで前足の踵を雪面に押し付けてエッジを立てる。

そこからの重心は後ろ足。お尻を後ろ足のハイバックに近づける感じ。

姿勢が低ければ低いほど後ろ足の腿に負担がかかる。

ヒールサイドターンでは基本姿勢の顎を上げるの忘れがちなので注意。

そしてターンの前半から後半にかけて徐々に上半身を開いていく。

深い切れ上がるターンをするときは、割と早めに上半身は開いてしまってもいいかも。

目線はトゥサイドターンと同じ。

 

ターンのリズム

トゥとヒールで気にしてるとこ書いたけど、ターンのリズムが狂うと動きがバラバラになって全然気持ちよく滑ることはできない。

ターンのリズムはブランコで立ち漕ぎに似ている。

ブランコが地面に一番近くなる時が、スノーボードのターンのピーク。

変なタイミングでブランコの板に力を加えたり、加える力が板に対して垂直にじゃなかったらブランコは上手く加速しない。

スノーボードで上手くリズムをとるためにヒールサイドからトゥサイドのターンの1セットで前の肩(もしくは肘)で∞の八の字を描くような感じが調子いい。

ターン弧のサイズで八の字を描くスピードも変わる。大きいターンなら八の字もゆっくりだし、小さいターンなら早い。

 

 

以上、ターンについて一通り気にしていることを書いたけど、乗っている板によって重心というか軸の位置は変わるけど、そこは上記が出来てる上での微調整の範囲だと思う。

いつかまた新しいことに気づいたらアップデートします。

Too many symbol files - These symbols have no corresponding slice in any binary

今作っているアプリをiTunesConnectにアップロードしたらApp Store Teamからメールが。

Too many symbol filesググると、どうやらビルド時に対応アーキテクチャが揃っていないのが原因ぽい。 これはBitcodeに対応していれば発生しない事象だと思う。

開発序盤にBitcodeに対応していないSDKがあるから、Bitcodeの設定を外してくれと言われたのを思い出した。 そのSDK(別会社が作ったデバイスと連携するframewok)の対応アーキテクチャを確認してみると、

armv7 armv7s arm64

だった。 このアプリのプロジェクトの設定は

arm64 arm64e armv7 armv7s

SDKにはarm64eが無いことがわかった。 なので、アプリの方(podライブラリも含め全て)もarm64eを外すことで解決。

d.hatena.ne.jp

qiita.com

Could not resolve com.android.tools.lint:lint-gradle:26.1.4.

久々にAndroidStudioでリリースビルドしようとしたら出てきたエラー。

ググってみた1番上に出てきたやつを見てみた。 stackoverflow.com けど、よく見てみたら、エラーの詳細内容が違っていて、自分のは

No cached version of com.android.tools.lint:lint-gradle:26.1.4 available for offline mode.  

となっていた。 これでググってみたところオフラインモードをやめろって回答を発見。 ru.stackoverflow.com たしかにNo cachedって言ってるしね。

で、自分のAndroidStudioの設定をみてみたところ、、Command-line Optionsにオフラインモードの指定はしてなかった・・・
また闇に・・・と思ったら、こんなところにオフラインモードのチェックボックスが。 f:id:hirokim412:20180831182211p:plain ここのチェックを外したら、ちゃんとビルドできましたとさ。

よくよく思い出してみると、昔ネットワークに繋がってない状態でビルドしようとして、ここにチェック入れたような気がする。

Swift4でclass_copyPropertyListでプロパティ名が取得できない?

今作っているアプリは、AWSのMoble Hubを使っている。 バックエンド側の開発をするまでもないけど、画像アップロードしておいたり、ユーザー認証とかDB(DynamoDB)とか使いたいなという時にもってこいのサービスだ。 説明はクラスメソッドさんの記事とかがわかりやすくて良い。(いつもお世話になっております。)

そんな中で、ちょっとハマったことを覚書。
Moble Hubはめっちゃ便利で、Moble Hubにあるサービスを使う設定すると、その設定に沿ったサンプルプロジェクトが自動生成されてダウンロードできる。
そのサンプルプロジェクトを参考に実装を進めていたのだが、DynamoDBでつまづいた。
自分のプロジェクトにコードを持ってきて実行しようとしたら、以下のエラーが発生した。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '_deleted is not a property of MyProject.Hoge.'

エラーの発生箇所を追っていくと、AWSMTLModel.mというクラスの以下のメソッドに使われている、class_copyPropertyListというメソッドでプロパティ名の一覧が取得できていないことが原因だった。

+ (void)enumeratePropertiesUsingBlock:(void (^)(objc_property_t property, BOOL *stop))block {
    Class cls = self;
    BOOL stop = NO;

    while (!stop && ![cls isEqual:AWSMTLModel.class]) {
        unsigned count = 0;
        objc_property_t *properties = class_copyPropertyList(cls, &count);

        cls = cls.superclass;
        if (properties == NULL) continue;

        @onExit {
            free(properties);
        };

        for (unsigned i = 0; i < count; i++) {
            block(properties[i], &stop);
            if (stop) break;
        }
    }
}

プロジェクトのターゲットでSwiftのバージョンを3.2にしたら、ちゃんと動いた。
けどSwift4で実装したい。と思って、調べたら以下ようにプロパティ一覧取得したいクラスの頭に@objcMembersをつけて解決。

@objcMembers
class Hoge: AWSDynamoDBObjectModel, AWSDynamoDBModeling {
    
    var _hogeId: String?
    var _hogeDate: String?
    
    class func dynamoDBTableName() -> String {

        return "hogehoge-mobilehub-1010453911-Reply"
    }
    
    class func hashKeyAttribute() -> String {

        return "_hogeId"
    }
    
    class func rangeKeyAttribute() -> String {

        return "_hogeDate"
    }
    
    override class func jsonKeyPathsByPropertyKey() -> [AnyHashable: Any] {
        return [
               "_hogeId" : "hogeId",
               "_hogeDate" : "hogeDate",
        ]
    }
}

参考) https://bugs.swift.org/browse/SR-5748

34歳で色々分岐点なので、ついでにブログも。。。

何年か前にブログ書こうと思い立って作ったのを思い出したので、見てみたら2年前の新婚旅行を最後に途絶えていた。

ついでに始めたブログだったし、だんだん会社に馴染んで行くにつれて書こうと思う日が無くなっていった。海外案件でちょいちょい出張いかせてもらったり、自社製品開発やらせてもらったりで結構忙しかったしね、という言い訳もしておく。 hirokim412.hatenablog.jp

3年前の初投稿からまた随分と環境が変わっていて、結婚して会社も変わって住む場所も変わっている。
去年の10月いっぱい、ほぼ3年働いた会社をやめて、以前崩壊した会社のメンバー2名が新たに建てた会社にジョインした。 崩壊した会社のメンバーといっても、社長含め役員陣と社員の対立が崩壊の原因であり、自分含め今の会社のメンバーは当時の社員だ。
崩壊した会社の社員、特にエンジニアメンバーは気が合う仲間が多く、今でも年に数回飲みに行っている。

そして人生初の在宅ワーク

自分の時間は確かに増えるし、打ち合わせも最小限で仕事に集中できるのだけど、家事をする量も増えた。というかほぼ家事は自分が担当だ。

住む場所はというと、東京都練馬区に住んでいたけど、仕事が在宅になるし、車も買いたいし、子供も欲しいしってことで、より広く安くを求めていたら埼玉県に来てしまった。

そんなこんなで、環境変わって約半年が過ぎようとしていて、このスタイルにも慣れて来たし、34歳になったし、春だし、新年度だし、足跡としてブログを書いてみた。
どの程度の頻度で書くかわらないけど、せっかく在宅なんだし、もうちょっと色々書こうかなぁ。