世界を動かす技術を、日本語で。

Xcodeは私が今まで使った中で最悪のプロフェッショナルソフトウェアです

概要

  • XcodeSwiftUI 開発における実際の困難と問題点の指摘
  • エラーメッセージやプロジェクトファイルの扱いに関する課題
  • Appleのドキュメントやサポート体制の不透明さへの批判
  • 開発者体験の悪化と代替手段の不足
  • 初学者や現役開発者への注意喚起と提言

Xcode・SwiftUI開発におけるエラー体験

  • SwiftUI 開発時によく遭遇するエラー「 The compiler is unable to type-check this expression in reasonable time」の意味
    • コンパイラが処理を諦めた状態
    • エラー箇所が実際の問題箇所と一致しない可能性
    • 単純な構文ミスから複雑なロジックまで原因が多岐
  • エラー発生時、 Xcode がほぼ役立たずの状態になる
    • 頻繁なコミット推奨
    • 問題解決までエディタとしてしか使えない状況

Xcodeプロジェクトファイルの問題点

  • myProject.xcodeproj/project.pbxproj ファイルの複雑さ
    • 数千行に及び、 人間には読めない形式
    • 設定ミスや競合=プロジェクト自体が開かなくなるリスク
    • 例:PBXContainerItemProxyなど意味不明な記述
  • マージコンフリクト時の絶望感
    • xcodegen などでYAML管理→自動生成する方法が現実的
  • UIKit アプリのUIレイヤーも同様に不可読ファイルで管理

UIやシステムの設計上の問題

  • ダイアログボックスの不具合例
    • 複数のパスワード入力ダイアログが重なる現象
    • 問題解決の進捗はシャドウの色でしか分からない

Appleのサポート・ドキュメントの不透明さ

  • In-App Purchaseのテストにおける混乱
    • Apple公式ドキュメントと実際の挙動の乖離
    • シミュレータでの挙動が不明確
    • 開発者フォーラムでも明確な答えが得られない現状
    • Appleの情報の信頼性の低さ

WWDCや公式発表の実態

  • WWDC での新機能紹介は実質的に広告
    • SwiftUI Previewの実用性の低さ
    • 実際には複雑なプロジェクトでは機能しない場合が多い
    • 公開時点での品質と発表内容の乖離

Appleのバグトラッカーと開発者サポート

  • Appleのバグトラッカー(Radar)は非公開
    • バグ報告は一方通行で、進捗や既知バグの共有なし
    • 開発者同士の情報共有が困難
    • 同じ問題の再発見に多くの時間が浪費される

Xcode以外の選択肢とCLIツール

  • iOS開発における エディタの選択肢の少なさ
    • neovim+xcode-build-serverは不安定
    • Jetbrains AppCodeは開発終了
  • CLIツールのドキュメント不足・使いにくさ
    • CIや自動化の難しさ
    • Fastlane など外部OSSに依存する現実
    • Claude CodeなどAIツールも同様に苦戦

macOS依存と開発者体験

  • macが必須 という前提
  • Xcodeでの開発経験が開発者としての成長を阻害
    • 問題解決が儀式化しやすい環境
    • 「Xcode再起動」「Derived Data消去」「Mac再起動」などのテンプレ対応
    • 根本的な理解や改善に繋がりにくい風土

初学者・現役開発者への提言

  • Appleは技術的負債や開発者体験の改善に消極的
  • iOS開発を始める人には Xcodeから距離を置くことを推奨
  • Xcodeの使い勝手や挙動に悩むのは 自分のせいではない
  • 「Xcode sucks」 という結論

Hackerたちの意見

いくつかの有効なポイントはあるけど、コンパイラはXcodeじゃないし、Swiftは式をチェックできないんだよね。個人的には、こういう場合は開発者がSwiftUIの仕組みを理解してないのが原因だと思うけど、逆にAppleはその理解を得るのを手助けしてくれないことが多い。頼りにしているライブラリのサポートを突然やめたり、何かしら壊れた状態に放置したりして、自分で何とかしなきゃいけないこともある。でも、良いところもあるよ。プロファイリングツールは素晴らしいし、Xcodeで10個の難しい問題に取り組む方が、Visual Studioで1個の問題に取り組むよりマシだね。

同意。個人的にはそんなに悪くないと思うし、プロファイリングツールは素晴らしいよ。

Appleはずっと開発者に冷たいことで有名だよね。ドキュメントもひどいし。彼らの大事なユーザーにアクセスするためには、媚びへつらわなきゃいけない。この記事に書いてあることは、Appleの開発に関するすべての独自性から離れる理由だよ。オープンなウェブ技術や既存のゲームエンジンで提供できないソフトウェアがあるなら、どんなものか教えてほしいな。

昔のApple、NeXTの逆買収の前は、ドキュメントがすごく充実してたよね。

ちなみに、俺はもう20年近くMacで開発してるけど、開発者体験としては最悪でも中間くらいだと思う。GTKやJS/HTML/CSSと比べると、こっちの方が好きだし(CSSにはいいところもあるけどね)。最悪なのは、明らかにバグがあるのに修正がすごく遅いこと。ドキュメントはもっとひどくなることもあるけど、今は多くの目が彼らのツールに注がれてるから、以前よりも生産的になるのはずっと簡単だよ。デバッグやプロファイリングは素晴らしい。Windowsでの開発は試したことがないから、全体的にこっちの方がいいって想像できる。アプリストアを通過する必要がないなら、それもまた地獄だしね。

Appleはスマートフォンの二大巨頭の一部じゃなかったら、開発者から避けられてたと思う。ツールやプロセスが本当にひどいからね。今、Googleは少なくともPlayストアでの公開に関しては、Appleよりもさらに悪くしようとしてるみたい。

問題なのは、Apple、Google、Microsoftの3社がそれぞれのプラットフォームを悪化させていることだね。競争が少なくて、資本や労働が集中しているのが原因だと思う。

悲しいことに、AppleはApp Storeの取り分で調子に乗る前は、開発者にもっと優しかった気がする。どのMac OS XにもSDKが入ったセカンドディスクが付いてたし(Xcodeはいつも不安定だったけど)。OSの仕組みを説明する技術ノートを出してたし、WWDCの動画みたいな広告っぽい高レベルの概要じゃなかった。あの頃は、オープンスタンダードを使おうとしたり、3rdパーティーがOSの隙間を埋めるのを許可してたのに、今じゃAPIのスマウグみたいになっちゃったね。

GoogleもAppleと同じように署名や認証の面倒なことをやってるだけじゃない?でもGoogleは無料だし。

Xcodeは初期のMac OS Xの頃は素晴らしかった。でも、iOS開発者のためのAppleの防壁になってからはクソになったね。

Appleは気にしてないよ。iTunesやiCloud、その他もろもろがどれだけひどいか見てみて。特にWindowsでの使い勝手は最悪。彼らのソフトウェアは本当にひどい。お金になることにしか注力してないし、サポートもほとんどない。フォーラムで叫ぶことしかできないけど、Appleの擁護者が失礼な返事をしたり、役に立たない一般的なアドバイスをしてくるだけだよ。

ある意味、Xcodeはアプリストアに公開したい人にとっては非常に価値のある製品だよね(彼らは何の努力もせずにすごい家賃を取るから)。それと関わらなきゃいけないし。

7、8年前にアプリストアとミュージックストアの内部ページをちらっと見たことがあるけど、デザインが1999年の時代遅れだったよ。

まったく同意だわ、気にしないって部分にね。でも、Androidのコードやビルド、テスト、公開のエコシステムでアプリを作ってみるべきだよ。仕事で両方のOSや開発エコシステムを使わなきゃいけなかったから、どっちが悪いのかずっと考えてたんだけど、結論が出せなかったのがもどかしい。だから、この素晴らしい二大独占の中で、2つのテックジャイアンツはユーザーや開発者に対してますます敵対的で情けない競争を繰り広げてる。 > 「Appleの擁護者は失礼な反応をしたり、役に立たない一般的なアドバイスをするだろう」 あはは。「持ち方が悪い」「これが神の意図した動き方だ」「新しいのを買え」…果物会社のファン現象だね。Appleの購入者の大半はユーザーや消費者じゃなくて、Appleのファンや支持者なんだよ。もしAppleがAndroidやLinux、Windowsのような消費者を持ってたら、今頃は何とか改善してたか、潰れてたかのどっちかだろうね。

ちょっと前に、Ted BendixsonがXCodeの外でiOS用にビルドするのがどれだけ悪夢かについて話してるポッドキャストを聞いたことがある(彼がここに書いた記事もあるよ: https://tedbendixson.substack.com/p/the-horror-of-making-you...)。その時は、Appleが悪意を持ってやってると思ってた。「私たちのエコシステムで働いてほしい、そうじゃなければ絶対に苦しめてやる」ってね。でも、この記事を読んでみると、もしかしたら本当に無能だったのかもしれない。

Apple Watchで開発してみて。実際のコードを書くより、接続の問題に時間を取られてる気がする…

Appleよ、Xcodeの謎のナビゲーションにラベルを付けるだけでいいのに、なんでそれができないの?

Xcodeの代わりにAppCode(IntelliJ IDE)が流行らなかった理由を教えてくれるXcodeユーザーはいない?最近iOSの仕事をしなきゃいけなくて、Xcodeがクソだって知ってたからAppCodeを試そうと思ったら、興味がなくて廃止されたって聞いて驚いたよ。

確か、実際にコードをコンパイルして実行するにはXcodeが必要だったよね。Appleの制限があったから。

AppCodeの問題は、Swiftの構文が急速に進化していて、AppCodeがそれに追いつけなかったこと。最新の(しかもすごく価値のある)追加を避けないと、私のコードの一部を理解できなかったんだ。理解できた時は、ナビゲーションやリファクタリングではXcodeよりずっと良かったけど、XIBを編集したり表示したりできなかったから、結局Xcodeを動かしながらXIBを編集する羽目になって、面倒だった。

俺は推測に過ぎないし、Xcodeユーザーじゃないけど、一般的な観察として、AppleユーザーはAppleが提供するものをそのまま使う文化がある一方で、Windowsの世界ではお気に入りのサードパーティの選択肢を探しに行く文化があると思う。

Xcodeを擁護しようと思ってたけど、記事を読んでみたら、これらの問題に慣れすぎてて、日々の地獄を意識してなかったことに気づいた。自分が免疫があると思っても、ストックホルム症候群は本当にあるからね。私が書いたApple開発の「ダークサイド」に関する似たような記事では、さらに多くの問題が取り上げられてるよ: https://www.magiclasso.co/insights/apple-development/

ストックホルムクラブの第一のルールは、自分がストックホルムクラブにいることを知らないってことだよ。

ロータスノーツを使ったことがない人の強い言葉だね。(記事は読んでないけど、テーマだけで判断してる)

純粋なC/C++/ObjCのIDEとしては、cmakeで生成されたプロジェクトファイルを使えば結構いい感じだね。でも、VSCodeも同じくらい使えるし ;) 統合されたMetalデバッガーは実際にかなりすごいんだけど、残念ながらCPUデバッガーはめっちゃシンプルで遅いのが難点だね。