Open7

Learning Swift

soh506soh506

Macにも久々に触ったし、Xcodeの使い方やiOSのことも知らない。VisionOSに突入したいが、触ってみた感じ、今までのものとは別物というより、iOSアプリの延長線上にあるような気がする。なのでまずはiOSアプリの作り方やSwiftを学んでからVisonOSに再突入しようと思う。このスクラップはどのような順番で何をしたか、何を学んだか、自分の勉強の記録。

何をどこから始めたらいいのかわからないので、まずは公式から。自分の性格上作りながら学んだ方が身につきやすいと思うので、公式のチュートリアルを始めることにする。

Develop apps for iOS

soh506soh506

Using stacks to arrange views

Section 1 Create a project

Section 2 Compose views

  • body propertyでcontent, layout, behaviorを記述する
  • VStackは縦に配置
  • HStackは横に配置
  • 入れ子構造にもできる

Section 3 Modify and style views

  • Spacer()で余白を作ったりできる
  • alignmentは.leadingで左寄せ.trailingで右寄せ、デフォルトは中央のはず
  • .padding()でちょっと縮めるイメージ

Section 4 Supplement accessibility data

  • inferred accesibilityって何?
  • .accessibilityElement(children: .ignore)childrenとignoreの意味

By default, VoiceOver reads the system name for the image: forward.fill. When you add the accesibility label, VoiceOver reads the label text, followed by the inherent accessibility trait: “Next speaker. Button.”

VoiceOverがどこを読み上げるのかってことか。

手順とビデオが出てきてそのまま真似すればいいのがありがたい。Tutrialすごいな。至れり尽くせり。ただ訳のわからない用語だらけなのでちょっとずつでも調べながら全体像の理解を深めていきたい。

soh506soh506

Creating a card view

Section1 Create a color theme

  • カラーテーマを作る OS作る時もこんなことやったな。

Section2 Create a daily scrum model

  • scrumというのがイマイチなんだかわからない。

Section3 Create the card view

  • ここが1番手こずる。手順通りやっているはずなのにプレビューに反映されない。仕方がないので出来合いをダウンロードしてそれをカスタマイズすることにした。これでようやく先に進めることができた。反映されない理由がわからない。タイポも疑ったが、自分が入力したものを出来合いにコピペしたら反映されたから、タイポでもないらしい。なぜだ。

Section4 Stylize the card

  • .paddingとかのcssの位置関係をいい加減に正確に覚える必要があるよな。
  • border外がmargin、border内とcontentの間がpadding
  • ならばiOSアプリは基本paddingのみしか使わないんじゃなかろうか。

Section5 Customize the label style

  • ラベルスタイルをまとめて変えるものらしいが、作る意味は何?独立させてコードを読みやすくするためらしい。

Section6 Make the card view accesible

  • VoiceOverで使いやすくするためにaccessibilityを使うっぽい。
soh506soh506

Displaying data in a list

Section1 Display a list of daily scrums

  • Viewの名前決定し、bodyを作って、プレビュー画面を作る。ひとつの型である。要素・構成を覚えよう。

Section2 Make scrums identifiable

  • uuidを使って要素の同一性を担保すると。
  • 終わった後のQuestionが勉強になる。

Views編は以上で終了。次回からはNavigation and modal presentationということらしい。ガワができたから次操作系を作っていく感じかな。

soh506soh506

ざっくり途中概観

Djangoで1回Webアプリ作った経験が地味に効いてる。ここはこういう意味なんだろうなとアタリがつく。今までやってきたことは無駄じゃない。Swiftの文法も型宣言して作っていくのか?javascriptにも似てるなと思った。まだまだ細かな用語はわからないものの何とかなりそうだとの見通しが立つ。

soh506soh506

Creating the edit view

Section1 Add an edit view for scrum details

  • CRUDのうちのUpdate作成と思われる
  • Formが出てきた
  • getが出てきたのは値取得のためか?

Section2 Display attendees in the edit view

  • Section使って入力項目を増やしていくみたい
  • ForEachの使い方を正確に覚える必要があるな
  • onDeleteの使い方も(atOffsetsとセットで使うの?)
  • @Stateも使い方を整理しよう
  • indicesはindexの複数形
  • Buttonのactionの定義の仕方
  • たまに出る$の意味を調べよう
  • disabledとかisEmptyとかの使い方

Section3 Add accessibility modifiers

  • accessibilityHiddenが出てきた

Section4 Present the edit view

  • .sheetでisPresentedが出てきた
  • .toolbarを作ってその中にToolbarItemを作る

次回はPassing data with bindingsとのこと。@Stateや@Bindingsの意味と使い方も整理せねば。徐々にアプリらしくなってきた。Simulaterで思ったように動いてくれるのが楽しい。

soh506soh506

シュミレーターが起動しなくなった時の修正

久々に勉強再開。Xcodeがうまく起動しなくて困った。upgradeしてると不具合出るよね。結局前のバージョンをアンインストールしてから再インストール。時間がかかった。でもよくよく原因を探るとVisionOSのシュミレーターが悪さをしていたり、アプリを作る際にiOSではなく、multiplatformにしていたり、と結局自分が原因であることが判明。やっぱりかである。
https://qiita.com/SNQ-2001/items/e4704dc996416976b41f

killall "Simulator" 2> /dev/null; xcrun simctl erase all