پایداری برنامه‌های iOS، مرگ یک آرزو



خوب امشب بعد از دومین ریوک سنگین اپل میخوام یه چرک نویس از داستان اپل براتون بنویسم که جواب اکثر سوال‌هاتون رو بگیرید.

به عنوان کسی که ۶ سال توی iOS بودم و بزرگ شدم، ۲ سال اخیر وقتمو روی اناردونی یه مارکت iOS گذاشتم میخوام بگم این قبر توش مرده نیست عزیزان بالای سرش گریه نکنید


اول اگه داستان ریوک/کرش شدن برنامه‌های خارج از اپ‌استور رو نمیدونید مقاله زیر رو ببینید که ادامه‌ی بحث براتون روشن‌تر باشه

https://virgool.io/@SaeedSheikhi/%DA%86%D8%B1%D8%A7-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%D9%87%D8%A7%DB%8C-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86%DB%8C-%D8%A8%D8%B9%D8%AF-%D8%A7%D8%B2-%D9%85%D8%AF%D8%AA%DB%8C-%D8%A8%D8%A7%D8%B2-%D9%86%D9%85%DB%8C%D8%B4%D9%88%D9%86%D8%AF-uz5hrosbj5lq


خوب این مقاله رو که خوندید میرسیم به اینکه آقا چرا اپل اصلا اینجور میکنه؟ کوتاه بگم، بخاطر "پول"

صرفا یک طرفه به قاضی رفتن نیست این حرف، توسعه‌دهنده‌های خارج از ایران هم دل خوشی از اپل ندارن. بخوام مثال بگم چند روز پیش یه مقاله از دردودل یه توسعه‌دهنده‌ی یک برنامه‌ی Ad Blocker میخوندم که دلش از دست اپل خون بود، برنامه‌ی محبوبی بوده و فروش خوبی توی اپ‌استور داشته ولی اپل اجازه‌ی آپدیت دیگه بهش نمیده. بله درسته اجازه‌ی آپدیت دیگه بهش داده نشده. برنامه ایرانی نیستا :)) خارجیه و از آپدیت شدن منع شده حالا چرا:


Here is their exact answer:

Guideline 2.5.1 - Performance - Software Requirements

Your app uses a VPN profile to block ads or other content in a third-party app, which is not allowed on the App Store.


وقتی میگیم همه‌ی بلاها و گرفتاری از سر سود بیشتره بیراه نیست، واقعا اپل و شرکت‌های دیگه تمایل ندارن که راه درآمدشون بسته یا کم یا باریک یا هرچیزی بشه :))، کاری به ذات موضوع ندارم ولی حداقل کار اینه که به کاربر اختیار داده بشه که چی نصب کنه. [یکم فاز ریچارد استالمن برداشتم]


حالا اینکه هرروز یه مارکت iOS جدید با شعار دهن پرکن جدیدی بیاد که ما کرش نمیشیم، شاید خنده دار باشه. به شخصه از روزی که به دوستان و عزیزان جواب میدادم در مقابل این سوال که آیا شما هم بسته میشید یا نه میگفتم: آره، دیر و زود داره ولی سوخت و سوز نداره. تا این لحظه که دارم این متن و مینویسم ساعت ۴ بامداد جمعه ۲۳ فروردین ۹۸ هر ادعایی مبنی بر وجود سیستمی خارج از اپ‌استور و گایدلاین‌هاش که پایدار باشه برای انتشار برنامه‌ها، کذب محضه.


خیلیا میگن راه ad-hoc هست، ولی حرف آخر و اول بگم،‌ ادهاک مزخرفه.به مراتب ادهاک یا ساین توسعه‌دهنده‌ وابستگی بیشتری به اپل داره. خوب تند نریم یه توضیح بدم همینجا که اصن اینا چین چون قرار خیلی بگیم ادهاک.


هر برنامه‌ خارج از اپ‌استور برای اجرا شدن روی دیوایس باید یک امضا داشته باشه ( همون unknown srcی که نداریم اینجا معلوم میشه )

اپل باید بدونه خارج از اپ‌استور این برنامه چیه و از کجا اومده و آیا اجازه باز شدن بهش باید بده یا نه.

ساین زیاد داریم به کنار ۲ تا اینجا مورد بحثه:

ساین یا امضای in-house که به همون اسم Enterprise هم میشناسید.

ساین یا امضای ad-hoc که میشه همون امضایی که توسعه‌دهنده برای تست اپلیکیشن‌هاش روی دیوایس‌های ریجستر شده‌ی خودش توی زمان development استفاده میکنه و حتی تعداد دستگاه‌های ریجستر شده یا همون UDID هم محدوده به ۱۰۰ دیوایس‌ه.


ساین in-house که همه بدبختی‌ها الان سر همینه خوبی‌هایی داره که به عنوان راه جایگزین تاحالا استفاده شده، اصلی ترینش تعداد نصب نامحدودشه، میلیون میلیون میشه نصبش کرد و کاربر Trust میزنه و تامام. از خوبی‌های دیگه‌اش بگیم اینکه TTL یا زمان expire شدنش اگه درست یادم باشه ۳ ساله‌اس. یعنی اگه اپل دستی ریوکش نکنه این تفلی ذاتا باید تا مدت زیادی که ۳ ساله زنده بمونه روی دیوایس شما ( الان سر ۱ ماه اپل خودش ریوک میکنه )


ساین ad-hoc چرا خوب نیست حالا ( مزخرف به عبارتی ). توی Enterprise شما میری فایل p12 امضاتو از پنل اپل میگیری و خدافظ بلند. اپل دیگه باهات کاری ندارم. هرچی خواستم با این امضا که دارم ساین میکنم بت جواب پس نمیدم

ولی توی ad-hoc قضیه فرق داره. باید قبل از نصب یه برنامه روی گوشی جدید UDID اون گوشی ثبت بشه توی پنل اپل، یعنی کاربر میاد میگه آقا من برنامه همراه‌‌اول و میخوام، شما باید UDID گوشیشو دربیاری سیستمت بره به پنل developer اپل لاگین بده ( اینجا باید تایید ۲ مرحله‌ای بزنی ) بعد یه api کال بده به پنل اپل که اقای اپل این گوشی جدید منه توسعه‌دهندس قراره باهاش اپ‌هامو تست کنم ثبتش کن. خوب حالا که این دیوایس کاربر معمولی به عنوان توسعه‌دهنده شناخته شده وقتشه با اون p12 که ماله همون اکانت ۱۰۰ تاییه یه ساین منحصر به کاربری که بهت درخواست داده انجام بدی. بگذریم از اینکه پیاده سازی این سیستم پر از استرسه چون قدم به قدم به اپل وابسته‌ای. تا جایی که حتی اگه اپل روی تایم session‌های لاگین پنلشو از ۳۰ روز که الان هست بکنه ۳ روز پروژه منفجر میشه چون سیستم شما که وظیفه ساین و ثبت UDID داره این وسط لنگ کد تایید دومرحله‌ای میشه، توی scale بالا این حرکت یعنی شکست، مگه اینکه شما روزی ۱۰۰-۲۰۰ تا کاربر ثبت کنی بگی آروم آروم بیاید من بتونم هندل کنم :))

یه حساب سرانگشتی بکنیم اگه ۵ میلیون کاربر iOS داشته باشیم به ازای هر ۱۰۰ کاربر باید یه اکانت developer به قیمت ۹۹ دلار خریداری بشه

میشه به عبارتی ۵۰ هزار اکانت، گرفتن این اکانت‌ها با سخت‌گیری‌های اپل به کنار، تداومش به کنار.

همه چی اصلا خوب پیش بره نهایتا TTL یا همون زمان expire شدن اپ‌های ad-hoc یک سالس و بعد ۱ سال دوباره باید همه‌ چیز از اول نصب شه. شاید این TTL هم کم بشه به ۱۲۰ روز چون دلیلی نداره برنامه‌ی تست یک توسعه‌دهنده ۱ سال زنده بمونه، ۳-۴ روز هم توسعه‌دهنده‌ای استفاده نمیکنه ازش :))) چه برسه ماه. و بله مرگ یه آرزو .


سازمان‌ها هم شاید موقت‌ن بتونن با ریساین جواب بگیرن ولی مهاجرت به وب با همه‌ی کاستی‌های iOS و بازی‌هایی که در میاره و Web Pushی که ساپورت نمیکنه راه خوبی میتونه باشه، حداقل دغدغه و درد سری دیگه وارد نمیکنه بهتون، خارج از بحث هزینه همین sms بازی و کشوندن کاربر به این طرف و اون طرف برای هیچ‌توسعه‌دهنده و شرکتی باب میل نیست. هدایت کنید به وب‌اپلیکیشن و این دندون و برای همیشه بکنید.

https://twitter.com/Monsieur_Lucky/status/1111595846238384128


برای انتشار در اپ‌استور راه‌‌هایی هنوز وجود داره در موارد خاص شاید کور سوی امیدی باشه و بهتره سعی خودتون رو چند باره انجام بدید،‌ هستند اپ‌هایی که چه با کدپوش چه بدون کدپوش درون اپ‌استور جا خوش کردن.