SwiftUI 個人メモ

SwiftUIの情報をまとめました.
正直キャッチアップはめんどくさいですが,切り捨てられない程度に時代について行きます.
ある程度時代の方向性が定まってから,最短ルートでついて行くつもりですが,SwiftUIに関する仕様の変更点は,まだまだあるのかもしれません.

– 概要の把握には以下の記事が参考になります.
SwiftUIの考察

– コードのサンプルには以下の記事が参考になります.
Apple Developer – SwiftUI Tutorials
Introducing SwiftUI
Fucking SwiftUI
カピ通信 SwiftUI

– SwiftUIサンプルコードを見ていると見慣れない some というキーワードが散見されますが,Swift 5.1 で導入される Opaque Result Type は以下の記事が参考になります.
Swift 5.1 に導入される Opaque Result Type とは何か

– 実際のアプリにSwiftUIを用いる際には,一部のビューから導入するというのが現実だと思われます.
一部の画面だけSwiftUIを使いたいとき

– Xcode11.4を触っていて見慣れない SceneDelegate.swift というのがあったので,調べます.
SwiftUIを触って分かったこと:①初期画面の設定方法

その他,見たことがなかった属性についてもまとめました.
@State
– SwiftUIのViewはstructのため,通常の値を更新することができない.@Stateを宣言することで,メモリの管理がSwiftUIフレームワークに委譲されて値を更新することができる.
– @Stateで宣言されたプロパティを子Viewに渡す時は、プロパティ名の頭に$をつける.プロパティの値そのものではなく、プロパティへの参照を渡すイメージ.
– @Stateは,値をコピーする.

@ObservedObject
– データクラスに対しては,@ObservedObjectを使用する.
– @ObsevedObjectは,View の外部からデータを取得する際に利用する.
– @ObsevedObject に@Published 属性を持つプロパティを用意する場合、そのプロパティに変化があればそのプロパティを利用する View が更新される.

@Binding
【SwiftUI】@Stateとか@Bindingて何

– @BindingをつけてやるとView間での双方向のデータ共有が可能となる.
– 子View側では、@Stateではなく@Bindingでプロパティを宣言する.
– 自らは保有せずに、親のプロパティを参照する.
– @Binding は実体を保持せず、参照してデータソースの値を変更する.
– 利用するデータソースを複数にせず、一つの正しいデータソースのみを参照し変更することで不具合を避けることができる.

@Environment
– @EnvironmentObjectを付与したプロパティは複数のViewで共通のインスタンスを参照する.(アプリ全体で共通のプロパティ)

@ViewBuilder
SwiftUIのViewBuilderについて調べてみる

ZiiX タイムアタッカーをGSX-R1000R ABSにつけました


MT-09にも取り付けていましたが,ZiiXタイムアタッカーをR1000にも取り付けました.
取り付けの参考になれば幸いです.

バイク屋さんと相談しながら取り付け位置を調整したのですが,走行中に注視できるのはインジケーターランプくらいなので,左側奥に両面テープで貼り付けることも検討したのですが,メンテナンスのプロから言わせると,耐久性を考慮して金属パーツで取り付けたいとのことでした.
結果,写真のように取り付けることととなりました.これでしばらく様子を見ようと思います.

インジケーターランプはベストな位置に取り付けることができました.
一度,乗車した印象ですが,SSの場合トップブリッジ付近にライダーの頭が位置するので意外にタイムアタッカー本体が気になりました.
また,太陽の日差しがタイムアタッカー表面に反射する場合があり,一般道を走行する場合はカバーの取り付けも検討したいです.
サーキット走行時は,GoProでの動画撮影を行っていますが,この取り付け位置ではタイムアタッカーの液晶面は撮影できないので,今後の課題です.

ついでにUSBポートも1口つけています.
以前MT-09にUSBポートを取り付けた際に,取り付けるデバイスにできる限りUSBポートは近づけた方が使い勝手がよいと感じていたので,考慮して取り付けています.
走行中は常に走行風を受けるので,ケーブルのバタつきなど軽減できる位置を考えるべきです.
繰り返しになりますが,ケーブル長も調整するのが手間なので,デバイスまでの距離はできるだけ短くした方がよいと思います.

では!

FC-Moto で買い物してみた件

FC-Moto (https://www.fc-moto.de/ja_JP) で買い物してみたので,出荷から商品が届くまでをメモしておきます.
海外ショップから商品購入を考えているが,少し心配だと感じている方の参考になれば幸いです.

FC-Moto というショップの特徴は,値段の安さで,一部の方たちにはよく知られたサイトのようです.
Ducati CorseのTシャツが欲しかったのですが,国内のネット販売サイトは在庫があるように見えて,実は在庫がない状況だったので,海外のショップから購入したという次第です.

▼ 商品の発送,トラッキングについて
実際,日本国内からFC-Motoの商品を買っている方の報告もネットで多数見つけられるので,ショップ自体は信頼していたのですが,ドイツから日本へ商品が問題なく届くのか? 期間は? 商品をどこまでトラッキングできるのか?など,若干の不安があったので,その点をメモしておきます.

ネットの商品購入報告を見ていると,商品発送から一週間弱で届いたよという報告が多かったのですが,私の場合は,一週間半ほど要しました.
流行病の影響を受けたのか?たまたまなのか?判断できませんが,10日程度はかかったわけです.
3/10 0時に注文して,3/11 に出荷通知がメールで届きました.

これが実際の商品のトラッキング状況ですが,発送から空港まではこまめにステータスが変わるのですが,3/12 〜 /19までステータスが更新されていません.この7日間は何なのでしょうか?この期間は,国際便発送の経験がないと結構心配になりますね.
商品発送にはDHLからお問い合わせ番号が知らされるので,サイトで検索することができます.

「You can track your package with DHL Track & Trace using the following link: XXXXX」
正確には EMS(国際スピード郵便)の番号のようです.
出荷を担当しているドイツのDHLは,DHLの関連会社のようです.(日本のDHL問い合わせオペレータ談)
興味深かったのは,発送ステータスが各社の検索システムで更新タイミングが異なる点です.

海外から商品を個人輸入するポイントは,発送元の国の空港から発送先の国に到着してから,発送ステータス更新には時間を要するということです.
1週間程度は,発送ステータスが更新されることがなくても心配しないで待つというのが良いようです.

▼ 発送料について
商品はTシャツが 4,000円,送料が約3,000円かかりました.
以前イギリスからロッシのポスターを購入した際には送料がもう少しかかっていたので,まぁ良心的な価格と判断しました.

▼ トラッキング サイト
DHL
https://www.dhl.de/en/privatkunden/pakete-empfangen.html

郵便局 EMS(国際スピード郵便)
EMS配達状況のご確認
https://www.post.japanpost.jp/int/ems/delivery/index.html

17TRACK
https://www.17track.net/ja

iOSシミュレータでVPNできない場合に確認する項目

最近,諸事情によりテレワークしています.
そのため自宅からお客様の環境へアクセスする際にVPNを使用しているのですが,iOSシミュレータがVPNを介して通信できないことがありました.
その際に確認した点をメモしておきます.

VPN接続ができたとしても,終日作業していると何らかの原因でVPN接続が切れることがありました.
通信ができない場合は,まずVPNの接続確認,再接続など確認した方がよいかもしれません.
また,VPNネットワーク 詳細… オプション 「すべてのトラフィックをVPN接続経由で送信」をチェックして通信状態が改善するか?確認すると解決できることがあるようです.(私はこれで改善できました.)

参考:Run app in iOS simulator with VPN connection

Charles のセットアップ メモ

久しぶりに iOS アプリ開発で Charles を使用したら,セットアップ方法に手間取ったので,メモしておきます.
iOS 10.3 から証明書を信頼する必要があるとのことですが,この手順をきれいさっぱり忘れていて,手間取ったので,メモしておきます.
実機で通信をモニタリングしようとしてうまくいかない方はこの点を確認されることをお勧めします.

▼ Charles でやったこと
・アプリの API リクエスト,レスポンスを確認した
・特定の API リクエストを失敗させて,適切なエラーハンドリングがされていることを確認した(Rewrite 機能)

▼ 設定手順
1. MacにCharlesをインストール
ダウンロードページ
https://www.charlesproxy.com/download/

2. CharlesのSLL Proxyを設定する
Proxy -> SSL Proxy Setting…
Host, Port (443)を設定する

3. MacのIPアドレスを確認する
iPhone に設定するため Charles の Help -> Local IP Address で MacのIPアドレスを確認する
(クラスAの方を適用する?)

4. 実機にSSL証明書をインストール
iPhone に SSL証明書をインストールするため,以下のURLにアクセスする
http://www.charlesproxy.com/getssl

5. 実機のHTTPプロキシを設定
設定 -> Wi-Fi (接続中 Wi-Fi の iマークをタップ) -> (画面最下段の)HTTP プロキシを構成
[手動]を選択し,IPアドレスとポート番号(8888)を入力する

6. 実機で証明書を信頼する
iOS 10.3から証明書の設定項目が追加されている
設定 -> 一般 -> 情報の最下部にある証明書信頼設定で,証明書を信頼する
Charles Proxy CA

ここまで設定すれば,MacのCharlesでiPhoneの通信がモニタリングできるはずです.
(iPhoneでVPNを使用している場合,VPNをオフ)

参考:
最速で作るCharlesのMac環境設定
【開発支援ツール】Charlesの使い方【神ツール】

AirPods Pro を使用した感想

11月上旬にAppleのWebサイトからAirPods Proを注文して,約1ヶ月でほどで入手することができました.
発売当初はさほど興味がなかったのですが,大半のレビューでノイズキャンセリングがとても良いとの評判だったので,注文してみました.

きっちり商品到着まで1ヶ月ほど要したのは,人気商品であることもあるかと思いますが,印字サービスを利用したことも影響しているかもしれません.
極力余計な印字を排除している製品にわざわざ印字するわけですから,利用者は少数かと思いますが,そこをあえていつも名前を印字しています.(笑)

AirPods Pro 価格は税込みで約30,000円.決して安くはありませんが,ソニーの同カテゴリーで高評価を得ている製品(SONY WF-1000XM3)が,約25,000円ほどであったので,少し高い価格設定です.
ですが,購入後に幸せになれると信じて目をつぶります.(笑)

今回購入に際しては,「アクティブノイズキャンセリング」「耐汗耐水性能(IPX4)」を重視しました.

利用した感想ですが,やはりノイズキャンセリングがとても好印象です.
従来よりAirPodsを使用しており,満足しているのですが,一つ不満をあげると,通勤時の駅のアナウンスがとてもうるさい場所では外部音がとても大きく,再生音が聞き取りにくいことがありました.
結果,再生音量が大きくなりがちということがあったのですが,ノイズキャンセリングが優秀で再生音量を抑えても聞きやすくなりましたし,音楽を聴いているとベース音が聞き取りやすくなったと感じます.

ノイズキャンセリングについては利用者の責任において,周りの交通状況に配慮するなど注意が必要だと思います.
ザワザワとうるさい場所では,ノイズキャンセリングにより集中を維持する助けにもなるかもしれません.


充電時に製品正面ランプが一瞬光ります.なにげに便利ですね.

2019年11月Windows10へ無償アップグレードする方法

Macユーザなのですが,年に一度の確定申告のためだけにParallels Desktopで,Windows7を使用しています.
Windows7がとても古いOSであることは重々承知の上なのですが,グズグズしているうちにとうとうMicrosoftによるサポートが2020年1月に終了するとのニュースを目にしました.

一時期,Windows7からWindows10へ無償アップグレードができた期間がありましたが,今はもう無理かなーと諦めていたところ,無償アップグレードができるようだったので,早速,実施してみました.

私の環境は,iMacでParallels Desktop 15 for Macを使用し,Windows7(32bit)を使用しているのですが,このような環境でも問題なくアップグレードできましたので,同じようなユーザーの方は試してみては如何でしょうか?

下記URLの「ツールを今すぐダウンロード」ボタンからアップグレードすることができます.
(インストール媒体を作成することも可能なようですね.)

Windows 10 のダウンロード

PhpStorm で JavaScript のデバッグ環境を設定する方法

PhpStorm でも JavaScript のデバッグができるとのこと.
PhpStorm なら普段使い慣れた IDE 環境のように操作することができると思い,設定項目を調べてみました.

設定項目は以下の通りです.

1. PhpStormのPHP設定を行う
2. ChromeにJetBrains IDE Supportをインストールする
3. ビルトインウェブサーバの設定を行う
4. JavaScript Debugの設定を行う

macOS Catalina を使用していますが,PHP 7.3.9がインストールされていたので,PhpStormに使用するバージョンを設定します.

Run/Debug ConfigurationsでBuilt-inサーバの設定を行います.(Name,Document rootを設定)
PhpStormのプロジェクトを作成し,htmlとjsのファイルを配置します.
Run/Debug ConfigurationsでJavaScript Debugの設定を行います.(Nameを設定)

(ウィンドウ右上の)デバッグボタンを押下することでデバッグを実行することができます.

参考: [PhpStorm/WebStorm]JavaScriptデバッガを使おう!
参考: [PhpStorm]ビルトインウェブサーバでPHPアプリを動かす

Xcodeビルド環境を切り替える方法

先日,改修を担当したiOSアプリのXcodeプロジェクト設定が非常にわかりずらいものでした.(PROJECT – Configurations と TARGETS が複数存在し,それらを切り替える Scheme が定義されていなかった)

改めてアプリの参照サーバを切り替える方法など,どのようなプロジェクト設定にしておけば,わかりやすいのか?考えてみたのですが,その際とても参考になった資料をメモしておきます.

参考: [Xcode] ビルド環境を切り替えるためにSchemeを追加する

参考: [Xcode] Xcode 8.0から「Active Compilation Conditions」が追加されて#if, #elseif, #else, #endifによる分岐設定がちょっと楽になってます

プロジェクトの設定項目

PROJECT
Build Settings
Apple Clang - Preprocessing
Preprocessor Macros

設定例:MYDEBUG=1
Swift Compiler - Custom Flags
Active Compilation Conditions

設定例:MYDEBUG
TARGETS
Build Settings
Swift Compiler - Custom Flags
Other Swift Flags

設定例:-D MYDEBUG

ソースコードでは以下のように切り替えることが可能です.

1
2
3
4
5
6
7
8
9
        #if DEBUG
            print("デバッグ環境")
        #elseif STUB
            print("スタブ環境")
        #elseif MYDEBUG
            print("MYDebug環境")
        #else
            print("その他環境")
        #endif