iOS SDKでの下位互換性



Appleは、OSの異なるバージョン間の非互換性を公式に宣言したことはありません。 それでも、メジャーリリースごとにOSのカーネルに何かが変更されます。バグを修正し、新しいバグをもたらします。 そして時々、誰もが慣れ親しんでいるバグの修正が新たな困難を追加します。iOS3では、iOS 4で迷わずに20ピクセルを追加しました。その結果、モーダルビューでは20ピクセル余分に残ります。



しかし、これは最悪の非互換性ではありません。新しいビルドを販売、修正、リリースできます。 また、たとえば、すでに伝統的なビデオを再生するための標準コントロールの変更を排除することも簡単です-新しいiOSごとに、Appleは古いインターフェースに追加、変更、完全に詰まります3これはUIViewからの通常のビューでしたが、iOS 4ではシャープなビューコントローラーになり、古いMPMoviePlayerViewは表示されなくなりました。



しかし、これはデバッガーの影響も受けます。フォーラムでは10秒で、コードがどこでも機能するような既成のハイブリッド修正コードを見つけることができます。



しかし、比較的新しいiOS 5はさらに驚きをもたらしました。 これは、人気のあるiPhoneアプリケーションの最新リリースでは、常に「iOS 5の問題を修正」という行が存在するという事実によっても証明されています。iPadの平均的なユーザーは、毎日約10個のアプリケーションアップデートを見つけます。 以下では、iOS 4とiOS 5の間の下位互換性の非自明な問題について説明します。これは、自分の肌で直面し、完全な痛みをとらなければなりませんでした。



問題



どういうわけか、10月末には、アプリケーションのユーザーから突然、セカンダリの1つですが、かなり重要なビューが突然機能しなくなったというメッセージが顧客に届き始めました。 アプリケーションはクラッシュせず、ナビゲーションは利用可能のままでしたが、データの代わりに、マレビッチの白い画面を想定しました。

顧客も私のチームも、他の200人以上のユーザーもこのバグを再現していません。 さらに、このアプリケーションは現在2か月間AppStoreに登録されており、以前に苦情を申し立てたことはありません。 ビューは、数十の隣接するものとまったく同じ原理に基づいて構築されました-データはデータベースから取得され、特定の方法で処理され、かなりカスタムUIに配置されました。

当分の間、何もしないことに決めました-少なくとも私たちのデバイスの広大な公園の1つでバグが再現されるまで待って、落ち着いて修正してください。



悪夢



しかし、問題はローカライズされていませんでした-毎日、ますます多くのユーザーがビューの欠如について不平を言い始めました。 Google Analyticsの統計から判断すると、これはキーとはほど遠いものであり、1週間に1回、10人ごとに使用されていたことを認めなければなりません。 しかし、アメリカ人の心理学を思い出してみましょう-彼ら自身、それを気付かずに、何らかのサービスの割引を取得しようとします-彼らは血にスラヴ人のように...欺くために持っているようです。

有料プログラムがその機能の100%を実行しないという考えは、99.9%を実行し、脳のブルジョワを興奮させ、睡眠と生命の味を奪います。

手紙の中で、彼は長い間、彼の会社が0.099ドルを支払ったデータの代わりに白い画面を見たときの想像を絶するイライラ感をヘミングウェイからインスピレーションを得て説明しています。 できるだけ早くこれを修正してください!!!、私たちは何を払っているのかわかりません!!!、私は適切に動作しない何かのために支払いたくありません!!! -これは、お客様が私のメールに親切に転送したメールのリストの始まりにすぎません。 最後に、バグは顧客のデバイスの3分の1(つまり、3分の1、まったくではありません!)で発生し始めました。 顧客自身からの1日5〜7通の手紙が、最終顧客の怒りの手紙に追加され始め、大文字で書かれ、できるだけ早く助けを祈っていました。

言うまでもなく、彼らはマニュアルをコピーし始めました。そして、それは順番に修正を必要とし始めました。



私たちはできる限りのことをしました。 私たちは、本番およびリリース候補の本番を含むすべてのビルドをここ数ヶ月の間にデバッグしました。 異なる時間と異なるロケールを設定します。 すべてが機能しました。バグを一般的に再現できる単一の構成(iOS 4.2.1、iOS 4.3、iOS 5.0)はありませんでした!



私たちのQAは1日おきに無力で肩をすくめました(私たちはまだ眠り、時には時間通りに仕事を離れる必要があるため)から、TeamViewerでお客様のデバイスをデビューしました。 しかし、私が彼らのために別のアドホックを収集するとすぐに、すべてが新しい方法で続きました。 私のメールは故障しています。 私のスカイプは平和と快適さを失いました。 私は数週間平和を失い、自分の無力さを悟りました。 これは私のキャリアの最初のバグでした(私は約5年間ITのさまざまな分野で働いていました)。それにアプローチする方法さえ見つけることができませんでした-私は考えられることとみんなが考えられることをすべて試しました。



解決策



だから、私は繰り返します-デバッガの下ですべてが機能しました。 これが最初の手がかりでした。 ポピーにはSDK 4.3のxCode 3.2.6が、チームのポピーには-SDK 5の4.2がありました。私にとっては新しいものに切り替えるのが面倒だったので、以前のバージョンのxCode 4とは異なりました。

チームリーダーとして、私は常にAppStoreとAd-Hocビルドをポピーに集めました。 取り引きが必要になったときに、ポピーでiOS 4.Xを搭載したiPad(iOS SDK 5を搭載したMacではデバッグできますが、大きなiOS 4.3イメージをダウンロードする必要があります)と、ポピーでiOS 5を搭載したiPadを引き落としました(デバッグなど)以前のiOS SDK 4を搭載したMacは使用できません)。 Objective-C自体は、SDK 4とSDK 5の一部の場所(同じ@autorelease {})で互換性がなく、新しいチップが好きなので、新しいxCodeから古いxCodeにバージョンを転送するときに、コードを少し編集します。 この最後の状況は、私を最終的な考えに導きました。



すぐに確認しました-最終的にSDK 5とxCode 4をインストールし、ipaファイル(古いAd-Hocビルドの類似物)を顧客に送信しました-期待どおりに動作しました。

あなたはおそらく問題が何であるかを推測しているでしょう。 どのコードがコンパイルされるかは関係ありません-どこでコンパイルされたかが重要です。 AppStoreで長年にわたって適切に機能していた同じコードが、iOS 5のリリース前でもiOS 4 SDKでiOS 4用にコンパイルされました。その後、ユーザーがiOS 5にアップグレードすると、正しく動作しなくなりました。



この問題は、iOS SDK 5で同じコードを再構築するだけで解決します。Appleが正確に変更したことは謎のままでした。 SDK 4を使用してxCodeからSDK 5を使用してデバイスをデバッグすることは不可能であり、アサーションを使用してコードを重み付けする時間を支払う人はいません。 残っているのは、新しいビルドをリリースし、Appleがアップグレードするのを待つことだけです。 すべてのhabrayuzersにアドバイスします-iOS SDK用にアプリケーションを再構築するだけでアプリケーションを更新し、Appleのベストプラクティスに従って、いくつかのグラフィカルなスイーツを追加して、エアレススペースの平均的なユーザーが新しいビルドをダウンロードする理由を理解できるようにします。



書かれた後



それでも、Appleはすべての古いバージョンですべての新しいリリースを採点し、正しいことをしていると思います-これはOSが常に良い匂いを嗅ぎ、カーネルがハードコードやハードフィックスで汚損するのを防ぎます。 結局のところ、SymbianとWindowsモバイルブランチが死んだのは、まさに後方互換性をサポートする必要があるからです。 はい。最近まで、大規模なWindowsは、死と同じくらい古いカーネルで構築されていました。



さらに、AppleはOSを更新するための優れたメカニズムを提供しており、同社の製品のすべてのユーザーになじみがあります。 ユーザーにアップグレードを求めるだけではありません。ユーザー自身が新しいバージョンにアップグレードしたいのです。 このため、メールマネージャーのUIのさらに別の改善、目覚まし時計の着信音の追加、または他のシンプルで明確なニシュタキが約束されています。 カンザスの農家は、新しいOSがリリースされるたびにiPhoneを更新していることを知らず、大洋のプログラマーに何時間も安らかな眠りを与えています。



All Articles