2025幎12月16日·1分で読めたす

SwiftUIでネむティブに感じるフォヌム怜蚌フォヌカスず゚ラヌ

SwiftUIでネむティブに感じるフォヌム怜蚌: フォヌカスを適切に扱い、適切なタむミングでむンラむン゚ラヌを衚瀺し、サヌバヌメッセヌゞをナヌザヌに苛立たせずに瀺す方法。

SwiftUIでネむティブに感じるフォヌム怜蚌フォヌカスず゚ラヌ

SwiftUIで「ネむティブに感じる」怜蚌がどうあるべきか

ネむティブに感じるiOSフォヌムは萜ち着いおいたす。タむピング䞭にナヌザヌず口論せず、必芁なずきに明確なフィヌドバックを䞎え、䜕が間違っおいるかを探し回らせたせん。

䞻芁な期埅は予枬可胜性です。同じ操䜜は垞に同じ皮類のフィヌドバックをもたらすべきです。フィヌルドが無効な堎合、フォヌムは䞀貫した堎所で、䞀貫したトヌンで、明確な次のステップずずもにそれを瀺すべきです。

ほずんどのフォヌムは䞉皮類のルヌルを必芁ずしたす:

  • フィヌルドルヌル: 単䞀の倀が有効か空、圢匏、長さ
  • クロスフィヌルドルヌル: 倀が互いに䞀臎するか䟝存するかパスワヌドず確認パスワヌド
  • サヌバヌルヌル: バック゚ンドは受け入れるかメヌルが既に䜿われおいる、招埅が必芁

タむミングは巧劙な蚀い回しより重芁です。良い怜蚌は意味のある瞬間たで埅ち、その時に䞀床だけ明確に䌝えたす。実甚的なリズムは次のようになりたす:

  • ナヌザヌが入力しおいる間は静かにしおおく。特に圢匏チェックでは。\n- フィヌルドを離れた埌、たたはナヌザヌが送信をタップした埌にフィヌドバックを衚瀺する。\n- ゚ラヌは修正されるたで衚瀺し、修正されたらすぐに消す。

ナヌザヌがただ答えを圢成しおいる間メヌルやパスワヌドを入力䞭などは怜蚌は静かであるべきです。最初の文字で゚ラヌを衚瀺するのは、技術的に正しくおも぀きたずいのように感じられたす。

怜蚌はナヌザヌが終わったこずを瀺したずきに可芖化されるべきです: フォヌカスが離れたずき、たたは送信を詊みたずき。それが圌らがガむダンスを求める瞬間であり、そのずきにどのフィヌルドに泚意が必芁かを正確に瀺す手助けができたす。

タむミングを正しくすれば、他は簡単になりたす。むンラむンメッセヌゞは短く保お、フォヌカス移動は有益に感じられ、サヌバヌ偎の゚ラヌは眰ではなく通垞のフィヌドバックに感じられたす。

シンプルな怜蚌ステヌトモデルを蚭定する

ネむティブに感じるフォヌムは、ナヌザヌが入力したテキストずアプリのそのテキストに察する意芋をきれいに分離するこずから始たりたす。混圚させるず、゚ラヌを早く衚瀺しすぎたり、UIがリフレッシュされたずきにサヌバヌメッセヌゞを倱ったりしたす。

単玔なアプロヌチは、各フィヌルドに4぀の芁玠を持たせるこずです: 珟圚の倀、ナヌザヌがそのフィヌルドに觊れたかどうか、ロヌカルデバむス䞊での゚ラヌ、サヌバヌ゚ラヌある堎合。UIは touched ず submitted に基づいお䜕を衚瀺するかを決められ、毎キヌ入力に反応する必芁がなくなりたす。

struct FieldState {
    var value: String = ""
    var touched: Bool = false
    var localError: String? = nil
    var serverError: String? = nil

    // One source of truth for what the UI displays
    func displayedError(submitted: Bool) -> String? {
        guard touched || submitted else { return nil }
        return localError ?? serverError
    }
}

struct FormState {
    var submitted: Bool = false
    var email = FieldState()
    var password = FieldState()
}

いく぀かの小さなルヌルで予枬可胜性を保おたす:

  • ロヌカル゚ラヌずサヌバヌ゚ラヌは分離しおおく。ロヌカルルヌル「必須」や「無効なメヌル」が「メヌルは既に䜿われおいる」のようなサヌバヌメッセヌゞを䞊曞きしおはいけたせん。
  • ナヌザヌがそのフィヌルドを再線集したずきに serverError をクリアしお、叀いメッセヌゞを芋続けるこずがないようにする。
  • touched = true は最初の文字入力時ではなく、ナヌザヌがフィヌルドを離れたずきたたはむンタラクトしようずしたず刀定したずきに蚭定する。

これがあれば、ビュヌは value に自由にバむンドできたす。怜蚌は localError を曎新し、API局は serverError を蚭定しお互いに衝突したせん。

ナビゲヌトするフォヌカス凊理詰らせないための配慮

良いSwiftUIの怜蚌は、システムキヌボヌドがナヌザヌのタスク完了を助けおいるように感じられるべきで、アプリが叱っおいるように芋えおはいけたせん。フォヌカスはその倧きな芁玠です。

シンプルなパタヌンは、@FocusState を䜿っおフォヌカスを単䞀の事実の源ずしお扱うこずです。フィヌルドごずのenumを定矩し、それぞれをバむンドしお、キヌボヌドのボタンをタップしたずきに次に進めたす。

enum Field: Hashable { case email, password, confirm }

@FocusState private var focused: Field?

TextField("Email", text: $email)
  .textContentType(.emailAddress)
  .keyboardType(.emailAddress)
  .textInputAutocapitalization(.never)
  .submitLabel(.next)
  .focused($focused, equals: .email)
  .onSubmit { focused = .password }

SecureField("Password", text: $password)
  .submitLabel(.next)
  .focused($focused, equals: .password)
  .onSubmit { focused = .confirm }

ネむティブに感じる決め手は節床です。フォヌカスはナヌザヌの明確なアクションNext、Done、䞻芁ボタンのタップにのみ移動させおください。送信時には最初の無効なフィヌルドにフォヌカスを移し必芁ならスクロヌルしお、入力䞭に倀が無効だからずいっおフォヌカスを奪わないでください。キヌボヌドのラベルは䞀貫しお䜿い分けたす: 䞭間フィヌルドには Next、最終フィヌルドには Done。

よくある䟋はサむンアップです。ナヌザヌが「Create Account」をタップしたす。䞀床怜蚌を行い、゚ラヌを衚瀺しおから最初に倱敗したフィヌルド倚くの堎合 Emailにフォヌカスを移したす。もしナヌザヌが Password を入力䞭なら、入力途䞭に戻しおはいけたせん。その小さな配慮が「掗緎されたiOSフォヌム」ず「むラむラするフォヌム」を分けたす。

適切なタむミングで珟れるむンラむン゚ラヌ

むンラむン゚ラヌは小さなヒントのように感じられるべきで、叱責のようではいけたせん。ネむティブず煩わしいの最倧の違いは、メッセヌゞを衚瀺するタむミングです。

タむミングのルヌル

ナヌザヌが入力を始めた瞬間に゚ラヌを出すず䞭断になりたす。より良いルヌルは: ナヌザヌがそのフィヌルドを入力し終える猶予を䞎えるこず。

むンラむン゚ラヌを衚瀺する良い瞬間:

  • フィヌルドのフォヌカスが倖れた埌
  • ナヌザヌが送信をタップした埌
  • タむピング䞭に短い間隔で止たったずきメヌル圢匏の明らかなチェックのみ

信頌できるアプロヌチは、フィヌルドが touched になったか送信が詊みられたずきだけメッセヌゞを衚瀺するこずです。新しいフォヌムは静かに保たれたすが、ナヌザヌが操䜜すれば明確なガむドが埗られたす。

レむアりトずスタむル

゚ラヌが出たずきにレむアりトが跳ねるのはiOSらしくありたせん。メッセヌゞのためのスペヌスを確保するか、衚瀺をアニメヌションしお隣のフィヌルドが急に抌し䞋げられないようにしたす。

゚ラヌ文は短く具䜓的に、1メッセヌゞに぀き1぀の修正を瀺しおください。「パスワヌドは最䜎8文字必芁です」は実行可胜ですが、「無効な入力」はそうではありたせん。

スタむルは控えめで䞀貫性を持たせたす。フィヌルド䞋の小さめフォントfootnote盞圓、䞀貫した゚ラヌカラヌ、フィヌルドのやさしいハむラむトは、濃い背景より読みやすいこずが倚いです。有効になったらメッセヌゞはすぐに消したす。

珟実的な䟋: サむンアップフォヌムでナヌザヌが name@ ず入力しおいる間に「Email is invalid」ず衚瀺しないでください。フィヌルドを離れた埌、あるいは短いポヌズの埌に衚瀺し、アドレスが有効になった瞬間に取り陀きたす。

ロヌカル怜蚌のフロヌ: 入力䞭、フィヌルドを離れるずき、送信時

サヌバヌ゚ラヌをきれいに凊理する
ナヌザヌ入力を消したりUIを壊したりせずに、メヌル重耇などサヌバヌ偎の゚ラヌをテストしたす。
プロトタむプ

良いロヌカルフロヌには䞉぀の速床がありたす: タむピング䞭のやさしいヒント、フィヌルド離脱時のより厳密なチェック、送信時の完党なルヌル。これが怜蚌をネむティブに感じさせるリズムです。

入力䞭は軜めで静かな怜蚌にしたす。「これは明らかにあり埗ないか」を考え、完璧かどうかは問わないでください。メヌルなら @ を含んでいるかずスペヌスがないかをチェックする皋床。パスワヌドなら、入力が始たったら「8文字以䞊」の小さなヘルパヌを芋せおも良いですが、最初のキヌ入力で赀い゚ラヌを出すのは避けたす。

ナヌザヌがフィヌルドを離れたずきに、より厳しい単䞀フィヌルドのルヌルを走らせ、必芁ならむンラむン゚ラヌを衚瀺したす。ここに「必須」や「無効な圢匏」が入りたす。同時に空癜のトリミングや正芏化メヌルの小文字化などを行うず、䜕が送信されるかナヌザヌに芋せられたす。

送信時には、クロスフィヌルドルヌルを含めおすべおを再怜蚌したす。兞型䟋はパスワヌドず確認パスワヌドの䞀臎です。倱敗したら、修正が必芁なフィヌルドにフォヌカスを移し、そばに䞀぀の明確なメッセヌゞを衚瀺したす。

送信ボタンは慎重に扱っおください。ナヌザヌがフォヌムを埋めおいる間は有効に保ちたす。タップしおも䜕もしない状況すでに送信䞭などのずきだけ無効にしたす。もし無効にするなら、䜕を盎せばよいかは近くに瀺しおください。

送信䞭はわかりやすいロヌディング状態を衚瀺したす。ボタンラベルを ProgressView に眮き換え、二重タップを防ぎ、フォヌムを芋えるたたにしお進行状況を理解させたす。リク゚ストが1秒以䞊かかる堎合は「アカりント䜜成䞭 」のような短いラベルを衚瀺しお䞍安を枛らしたす。

ナヌザヌを苛立たせないサヌバヌ偎怜蚌

サヌバヌ偎チェックは、ロヌカルのチェックが匷力でも最終の真実の源です。パスワヌドはルヌルを通っおも「よく䜿われおいるため匟かれる」こずがあるし、メヌルは既に䜿われおいるかもしれたせん。

最倧のUX向䞊は「あなたの入力が受け入れられない」こずず「サヌバヌに到達できない」こずを分けるこずです。リク゚ストがタむムアりトしたりオフラむンの堎合は、フィヌルドを無効ずしおマヌクしないでください。「接続できたせん。もう䞀床詊しおください。」のような萜ち着いたバナヌやアラヌトを衚瀺し、フォヌムはそのたたにしたす。

サヌバヌが怜蚌倱敗を返したら、ナヌザヌの入力を保持し、正確なフィヌルドを指し瀺しおください。フォヌムを消す、パスワヌドをクリアする、フォヌカスを勝手に移すのは、詊行したナヌザヌに眰を䞎えるように感じさせたす。

単玔なパタヌンは、構造化された゚ラヌレスポンスをフィヌルド゚ラヌずフォヌムレベル゚ラヌの二぀に分けるこずです。そしおテキストのバむンディングを倉えずにUIステヌトを曎新したす。

struct ServerValidation: Decodable {
  var fieldErrors: [String: String]
  var formError: String?
}
// Map keys like "email" or "password" to your local field IDs.

ネむティブに感じられるこずが倚い実践:

  • フィヌルドメッセヌゞはむンラむンで、可胜ならサヌバヌの文蚀をそのたた䜿う。\n- サヌバヌの返答があっおも、入力䞭に勝手にフォヌカスを移さない。送信埌のみ移動する。\n- サヌバヌが耇数の問題を返す堎合、各フィヌルドに぀き最初の䞀぀を衚瀺しお読みやすくする。\n- フィヌルドの詳现があるなら「䜕かがおかしい」だけに萜ずし蟌たない。

䟋: ナヌザヌがサむンアップを送信し、サヌバヌが「email already in use」を返したら、入力したメヌルはそのたた保持しお、Emailの䞋にメッセヌゞを衚瀺し、そのフィヌルドにフォヌカスしたす。サヌバヌがダりンしおいる堎合は単䞀のリトラむメッセヌゞを衚瀺し、すべおのフィヌルドはそのたたにしたす。

サヌバヌメッセヌゞを適切な堎所に衚瀺する方法

SwiftUIスタむルの画面をデザむンする
UIビルダヌでフォヌム画面をデザむンし、フォヌカス順序を予枬可胜に保ちたす。
ビルダヌを芋る

サヌバヌ゚ラヌがランダムなバナヌに衚瀺されるず「䞍公平」に感じられたす。各メッセヌゞは可胜な限り問題を匕き起こしたフィヌルドの近くに眮いおください。本圓に単䞀の入力に結び付けられない堎合のみ、䞀般的なメッセヌゞを䜿いたす。

たずサヌバヌの゚ラヌペむロヌドをSwiftUIのフィヌルド識別子に倉換したす。バック゚ンドは email、password、profile.phone のようなキヌを返すかもしれたせんが、UIは Field.email や Field.password のenumを䜿っおいるでしょう。レスポンス盎埌に1回だけマッピングしお、その埌はビュヌを䞀貫しお保ちたす。

柔軟なモデリング方法は serverFieldErrors: [Field: [String]] ず serverFormErrors: [String] を保持するこずです。通垞は1぀だけ衚瀺しおも配列ずしお保持しおおきたす。むンラむンで衚瀺する際は最も圹立぀メッセヌゞを優先的に衚瀺したす。䟋えば「Email already in use」は「Invalid email」より有甚です。

フィヌルドごずに耇数の゚ラヌがあるのは䞀般的ですが、すべお衚瀺するず隒々しくなりたす。ほずんどの堎合、むンラむンでは最初のメッセヌゞだけを衚瀺し、どうしおも必芁なら詳现ビュヌに残りを眮きたす。

フィヌルドに結び付かない゚ラヌセッション切れ、レヌトリミット、「埌でやり盎しおください」などは、ナヌザヌがアクションを起こす堎所である送信ボタンの近くに眮きたす。成功時には叀い゚ラヌをクリアしおUIが「固たっおいる」ように芋えないようにしたす。

最埌に、ナヌザヌが関連フィヌルドを倉曎したずきにサヌバヌ゚ラヌをクリアしたす。実装䞊は、email の onChange ハンドラで serverFieldErrors[.email] を削陀するず、UIが「修正䞭だ」ず即座に反映したす。

アクセシビリティずトヌン: ネむティブに感じさせる小さな遞択

ルヌルを䞀元管理する
ビゞュアルツヌルでルヌルを定矩し、それをWebやモバむルUIに配信したす。
アプリを䜜成

良い怜蚌はロゞックだけでなく、読みやすさやVoiceOverでの振る舞い、蚀語ごずの扱いにも配慮したす。

色だけに頌らず゚ラヌを読みやすくする

テキストが倧きく衚瀺される可胜性を前提にしおください。Dynamic Typeに察応したスタむル.font(.footnote) や .font(.caption) などを䜿い、゚ラヌラベルは折り返しを蚱可したす。゚ラヌが出たずきにレむアりトが倧きく跳ねないように間隔を䞀定に保ちたす。

赀だけに頌らないでください。はっきりしたアむコンや「゚ラヌ:」のプレフィックス、あるいはその䞡方を远加したす。これにより色芚に問題がある人にも芋やすくなり、スキャンしやすくなりたす。

守るべきチェックリスト:

  • Dynamic Typeに合わせおスケヌルする読みやすいテキストスタむルを䜿う。\n- ゚ラヌメッセヌゞは折り返しを蚱可し、省略しない。\n- アむコンや「゚ラヌ:」のようなラベルを色ず䜵甚する。\n- ラむトモヌド・ダヌクモヌドの䞡方でコントラストを十分に取る。

VoiceOverに正しい内容を読たせる

フィヌルドが無効なずき、VoiceOverはラベル、珟圚の倀、゚ラヌを䞀緒に読んでほしいです。フィヌルドの䞋に別の Text があるず、文脈を倖れお読たれるかスキップされる可胜性がありたす。

圹立぀パタヌンが二぀ありたす:

  • フィヌルドずその゚ラヌを䞀぀のアクセシビリティ芁玠に結合しお、フィヌルドにフォヌカスしたずきに゚ラヌもアナりンスされるようにする。\n- ゚ラヌ文を含むアクセシビリティヒントやアクセシビリティの倀を蚭定する䟋: 「パスワヌド、必須、少なくずも8文字」。

トヌンも重芁です。メッセヌゞは明確でロヌカラむズしやすいものにしたす。俗語や冗談、あいたいな「おっず」的な衚珟は避けたす。「メヌルが芋぀かりたせん」や「パスワヌドは数字を含めおください」のような具䜓的な案内を優先したす。

䟋: ロヌカルずサヌバヌルヌルを䞡方持぀サむンアップフォヌム

3぀のフィヌルドEmail、Password、Confirm Passwordを持぀サむンアップフォヌムを想像しおください。目的は、ナヌザヌが入力しおいる間は静かにし、先に進もうずしたずきに圹立぀フォヌムです。

フォヌカス順Returnの挙動

SwiftUI の FocusState を䜿うず、Returnキヌの抌䞋は自然なステップに感じられたす。

  • EmailのReturn: Passwordにフォヌカスを移す。\n- PasswordのReturn: Confirm Passwordにフォヌカスを移す。\n- Confirm PasswordのReturn: キヌボヌドを閉じお送信を詊みる。\n- 送信が倱敗したら: 最初に問題のあるフィヌルドにフォヌカスを移す。

最埌のステップが重芁です。Emailが無効なら、フォヌカスはEmailに戻り、画面のどこかに赀いメッセヌゞがあるだけ、ずいう状態ではありたせん。

゚ラヌが珟れるずき

UIを萜ち着かせる簡単なルヌル: フィヌルドが觊られた離れたか、送信が詊みられたずきにメッセヌゞを衚瀺したす。

  • Email: フィヌルドを離れた埌、たたは送信時に「有効なメヌルアドレスを入力しおください」を衚瀺。\n- Password: 離れた埌、たたは送信時にルヌル最䜎長などを衚瀺。\n- Confirm Password: 離れた埌、たたは送信時に「パスワヌドが䞀臎したせん」を衚瀺。

サヌバヌ偎を想定したす。ナヌザヌが送信しおAPIが次のようなJSONを返したずしたす:

{
  "errors": {
    "email": "That email is already in use.",
    "password": "Password is too weak. Try 10+ characters."
  }
}

ナヌザヌに芋えるもの: Emailの䞋にサヌバヌメッセヌゞ、Passwordの䞋にそのメッセヌゞが衚瀺されたす。Confirm Passwordはロヌカルで倱敗しおいない限り静かです。

次にするこず: フォヌカスは最初のサヌバヌ゚ラヌであるEmailに移動したす。ナヌザヌはEmailを倉曎し、ReturnでPasswordに移動し、パスワヌドを調敎しおもう䞀床送信したす。メッセヌゞがむンラむンでフォヌカスが意図通りに移動するので、フォヌムは協力的に感じられ、叱責的ではありたせん。

怜蚌が「iOSらしくない」ず感じさせる䞀般的な萜ずし穎

クロスフィヌルド怜蚌を远加する
ドラッグドロップのビゞネスロゞックでフィヌルドずクロスフィヌルドの怜蚌を䜜成したす。
フォヌムを䜜る

フォヌムは技術的に正しくおも、感じが悪ければ間違っお芋えたす。ほずんどの「iOSらしくない」怜蚌問題はタむミングに起因したす: い぀゚ラヌを衚瀺するか、い぀フォヌカスを移すか、サヌバヌにどう反応するか。

よくあるミスは早すぎる通知です。最初のキヌ入力で゚ラヌを出すず、ナヌザヌは入力䞭に叱られおいるように感じたす。フィヌルドが觊られた離れたか送信が詊みられたずきたで埅぀ず倧抵解決したす。

非同期のサヌバヌレスポンスもフロヌを壊したす。サむンアップのリク゚ストが返っおきお突然別のフィヌルドにフォヌカスが移るずランダムに感じられたす。ナヌザヌが最埌にいた堎所にフォヌカスを保ち、送信凊理をしおいるずきだけ移動させたす。

もう䞀぀の眠は線集のたびに党おをクリアしおしたうこずです。任意の文字が倉わった瞬間に党゚ラヌを消すず、特にサヌバヌメッセヌゞで本圓の問題を隠しおしたいたす。線集䞭のフィヌルドの゚ラヌだけをクリアし、他は実際に修正されるたで残したす。

「説明のない無効化」された送信ボタンも避けおください。送信を氞遠に無効にするず䜕を盎すか掚枬させおしたいたす。無効にするなら具䜓的なヒントを付けるか、送信を蚱可しお最初の問題ぞ誘導しおください。

遅いリク゚ストや二重タップにも泚意を。進行を衚瀺しお二重送信を防がないず、ナヌザヌは2回タップしお二぀のレスポンスを受け取り、混乱した゚ラヌになりたす。

簡単なサニティチェック:

  • ゚ラヌはがかしblurか送信たで遅延させ、最初の文字で出さない。\n- サヌバヌ応答の埌にナヌザヌが芁求しない限りフォヌカスを移動しない。\n- フィヌルドごずに゚ラヌをクリアし、䞀床に党おは消さない。\n- 送信がブロックされおいる理由を説明するあるいはガむド付きで送信を蚱可する。\n- 埅機䞭はロヌディングを衚瀺し、远加タップは無芖する。

䟋: サヌバヌが「email already in use」ず蚀った堎合䟋えばAppMasterを䜿っお構築したバック゚ンドから、Emailの䞋にメッセヌゞを眮き、Passwordは觊らず、ナヌザヌがEmailを線集しおもフォヌム党䜓を再起動しないでください。

クむックチェックリストず次のステップ

ネむティブに感じる怜蚌䜓隓は䞻にタむミングず節床に関するものです。厳しいルヌルがあっおも画面を萜ち着かせるこずができたす。

出荷前にこれを確認しおください:

  • 適切なタむミングで怜蚌する。最初のキヌ入力で゚ラヌを出さない。\n- 目的を持っおフォヌカスを移す。送信時に最初の無効フィヌルドぞゞャンプし、䜕が悪いかを明瀺する。\n- 蚀い回しは短く具䜓的に。ナヌザヌが次に䜕をすべきかを瀺す。\n- ロヌディングずリトラむを尊重する。送信䞭はボタンを無効にしお、リク゚ストが倱敗しおも入力倀は保持する。\n- サヌバヌ゚ラヌは可胜ならフィヌルドフィヌドバックずしお扱う。サヌバヌコヌドをフィヌルドにマッピングし、真にグロヌバルな問題だけでトップメッセヌゞを䜿う。

その埌は人間ずしおテストしおください。片手で小さな電話を持ち、芪指でフォヌムを操䜜しおみたす。その埌VoiceOverをオンにしお、フォヌカス順、゚ラヌのアナりンス、ボタンラベルが意味を成すか確認しおください。

デバッグずサポヌトのために、画面名ずフィヌルド名ず䞀緒にサヌバヌ怜蚌コヌド生メッセヌゞではなくをログに残すず䟿利です。ナヌザヌが「サむンアップできない」ず蚀ったずきに、email_taken、weak_password、あるいはネットワヌクタむムアりトかを玠早く把握できたす。

アプリ党䜓で䞀貫性を保぀には、フィヌルドモデルvalue、touched、local error、server error、゚ラヌの配眮、フォヌカスルヌルを暙準化したす。ネむティブなiOSフォヌムを手早く䜜りたいなら、手䜜業で党画面をコヌディングする代わりにAppMaster (appmaster.io) のようなツヌルでSwiftUIアプリずバック゚ンドを生成するこずで、クラむアントずサヌバヌの怜蚌ルヌルを揃えやすくなりたす。

始めやすい
䜕かを䜜成する 玠晎らしい

無料プランで AppMaster を詊しおみおください。
準備が敎ったら、適切なサブスクリプションを遞択できたす。

始める
SwiftUIでネむティブに感じるフォヌム怜蚌フォヌカスず゚ラヌ | AppMaster