ساخت و انتشارِ اپ مک و iOS بدون بازکردنِ Xcode
خلاصهٔ کاملتر
نویسنده میگه چند پادکسترِ حوزهی اپل تازگی از بدبودنِ Xcode و سختیِ vibe-codingِ اپ مک و iOS گله میکنن، و حرفشون بیراه نیست؛ ولی از نظرش سؤال اینه که اصلاً چرا Xcode رو باز میکنن. با کمی کارِ مقدماتی میشه بدونِ نگاهکردن به Xcode هرچقدر که بخوای اپ vibe-code کرد. حتی میگه اگه جایی گیر کردی، همین پستِ وبلاگو به Claude Code یا ابزارِ LLMِ خودت بده تا برات دربیارتش — کارِ همونه دیگه.
ایدهی اصلی اینه که Xcode.app باید نصب باشه ولی لازم نیست باز بشه، چون ابزارهایی مثل xcodebuild، notarytool، stapler و devicectl داخلِ Xcode زندگی میکنن ولی از یه shell بهخوبی اجرا میشن. فقط باید حواست باشه toolchainِ انتخابشده Xcode.app باشه، نه بستهی مستقلِ Command Line Tools که SDKِ iOS و notarytool رو نداره. نویسنده استفاده از XcodeGen رو هم توصیه میکنه: یه فایلِ project.yml میسازه و تو هر build کلِ پوشهی .xcodeproj رو از روش بازتولید میکنه، پس فقط همون YAML به گیت commit میشه و بقیه ignore.
تنها بخشی که اصطکاک داره آمادهسازیِ یکبارهی گرافیکیه: ورود به اپل آیدی (که به یه حسابِ توسعهدهندهی پولی نیاز داره)، و ساختِ گواهیِ «Developer ID Application». نویسنده تأکید میکنه این با هویتِ «Apple Development» فرق داره — اولی برای اپِ نوتارایزشدهای که رو مکِ بقیه از Gatekeeper رد میشه، دومی برای اجرا رو دستگاههای خودته. ساختِ این گواهی، کلید خصوصیشو هم تو login keychain نصب میکنه که همون امضا رو انجام میده و قابلدانلودِ دوباره نیست، پس باید ازش بکاپ گرفت. یه بار هم باید رمزِ نوتارایزو (یه app-specific password، نه رمزِ اپل آیدی) بهشکلِ تعاملی ذخیره کنی.
قلبِ ماجرا یه اسکریپتِ release.shه که یه بار مینویسیش و کلِ زنجیره رو اجرا میکنه: archive، امضای Developer ID، نوتارایز، staple و نصب تو /Applications — و اگه هر مرحله بشکنه با صدای بلند میایسته. نویسنده میگه خودش این اسکریپتو به Claude Code سپرده؛ چون خطِ لوله رازی نیست و روشِ مستند و متعارفِ انتشارِ اپ مکه، مدل از قبل بلده. چیزی که مدل ازش خواسته فقط جزئیاتِ پروژه بوده: نامِ scheme، team ID، اسمِ profileِ نوتاری و محلِ نصب. اولین نسخه شکست، با هم درستش کردن، و این حلقه شکست نیست، خودِ فرآینده.
نویسنده توضیح میده امضا موقعِ نبودِ گرافیک چطور کار میکنه: کلید خصوصی تو keychain امضا رو انجام میده و گواهی که به ریشهی اپل زنجیر میشه، توش جاسازی میشه تا هرکسی بتونه راستیآزماییش کنه. امضای خودکار هویتِ درستو با team ID انتخاب میکنه، پس profileها لازم نیست تو مخزن باشن. entitlementها (مثل sandbox، iCloud KVS و App Group) موقعِ امضا با یه هویتِ واقعیِ تیمی بایند میشن؛ برای همینه که buildهای ad-hoc نمیتونن منتشر بشن. نکتهی مهم اینه که نوتارایز، امضا نیست: امضا ثابت میکنه کی اپو ساخته، ولی نوتارایز یه اسکنِ بدافزارِ جداست که اپل انجام میده و ticketشو staple میکنی تا Gatekeeper آفلاین هم بهش اعتماد کنه.
جمعبندیش اینه که رابطِ گرافیکی فقط برای همون آمادهسازیِ یکبارهی گواهی لازمه و بعدش کلِ چرخهی عمر اسکریپتپذیره. نویسنده میگه Claude Code همهی اینها رو از طریقِ یه shellِ ساده و غیرتعاملی اجرا میکنه، بدونِ هیچ MCP یا پلاگینِ خاص — همون ابزارهای استانداردِ CLI. چسبِ کار هم فایلِ CLAUDE.md (یا AGENTS.md) ه که به ایجنت میگه قرارداد و مسیرها چیه تا بدونِ توضیحِ دوباره فقط اجراش کنه. کارِ واقعی ساختِ همین release.sh و CLAUDE.mdه که یکی دو ساعت میبره، و بعدش «یه build جدید بفرست» میشه یه جمله، و Claude Code میتونه همین ستاپو رو اپهای بعدی هم کپی کنه.
نکات کلیدی:
- Xcode.app باید نصب باشه ولی هیچوقت لازم نیست باز بشه؛ ابزارهاش از shell اجرا میشن
- یه بار آمادهسازیِ گرافیکی لازمه: اپل آیدی، گواهیِ Developer ID و رمزِ نوتارایز
- یه اسکریپتِ release.sh کلِ زنجیرهی archive تا نصبو انجام میده و با هر خطا میایسته
- با CLAUDE.md، ایجنت کلِ ساخت و انتشارو بدونِ توضیحِ دوباره دست میگیره




