web-dev-qa-db-ja.com

AppleはiOSの静的フレームワークしか許可しないのはなぜですか?

明らかに、Appleは、iOS向けに動的に読み込まれるライブラリ(フレームワーク)を作成する機能を備えています。XCode(UIKitなど)がいくつか付属しているためです。アプリ開発者は、静的ライブラリを作成する機能しかありません。または、よくても、Xcodeをだまして、実際に静的ライブラリをロードしているときにフレームワークをロードしていると考えさせます。これは、偽のフレームワークの作成と呼ばれ、ドラッグアンドドロップの便利さの一部ですが、動的ロードの利点はありません。

アプリ開発者からの動的フレームワークを維持するためのAppleの理由は何ですか?開発者は気の利いたリンカーフラグやオープンソースライブラリの依存関係チェーンに依存する必要がないため、外部ライブラリの使用がかなり容易になるようです。

一般的な理由はセキュリティです。なぜAppleはiOSではなくOSXで許可するのですか?セキュリティも要件ではないのですか?

編集:これはiOS 8以降では関係ありません。Appleは動的フレームワークのサポートを追加しました。

11
Joel Fischer

プログラムを受け入れるためのAppleの基準の1つは、サポートされていないApple API's(またはその他の悪いもの)を呼び出すかどうかです。静的リンクを要求することで、ソフトウェアがそのようなことをしないことを証明できます。動的リンクを許可すると、あらゆる種類の動作を後で追加できるようになり、承認プロセスがかなり無効になります。

AppleはOSXでのダイナミックリンクを許可しています。これは、Macintoshはタブレットデバイスではなく実際のコンピューターであり、実際のコンピューターのユーザーはそれらがこのようにプログラム可能であることを期待しているためです。タブレットや携帯電話の市場は、デスクトップやラップトップコンピュータの市場とはかなり異なります。コンピュータは本番デバイスです。ユーザーは、自分のしたいことを、自分のやりたいように実行するプログラムを作成するなど、製品を自分で作成できると期待しています。これは、消費デバイスであるタブレットデバイスの期待ではありませんでした。

タブレットとApple Storeの全体的なポイントは、歩行者ウイルスなどから消費者を保護するための閉じた環境を作成することでした(まあ、Apple店を通じて行われたすべてのソフトウェア販売の30%を収集します)。

17
Robert Harvey

その理由は、この Stack Overflowの質問 で述べられているようにセキュリティです。

その理由はセキュリティです。動的ライブラリは実行時にロードおよびアンロードできるため、追加の実行可能コードをダウンロードしてロードできます(プラグインを考えてください)。これはハッカーによって危険にさらされる可能性があり、携帯電話で悪意のあるコードが実行されることは非常に悪いことです。また、承認されていないアプリに承認されていない機能を追加することもできます。要するに、この環境では、Appleは動的リンクを厳密に制御する必要があるPandorasボックスであると見なします。そうでない場合、セキュリティを危険にさらす可能性があり、電話では意味があることに同意します。

8
World Engineer