2013-05-20 16 views
5

他のSDK(たとえばFacebook SDK 3.5など)を統合するiOS SDKを開発しています。 衝突を防ぎ、私の顧客がそれらのSDKをインポートできるようにするために、自分のコード内のすべてのクラス/列挙体の名前を変更したいとします(例えば、FBSessionの名前をRDFBSessionに変更するなど)。iOS SDK:多くのクラスの名前を変更する

クラスごとに移動し、Xcodeの名前変更機能を使用する代わりに、これを行う簡単な方法はありますか?

+0

Xcodeにはリファクタリング機能があり、これにより簡単になります。 – trojanfoe

+0

@trojanfoe私はそれを認識しています。名前を変更するクラスやシンボルがたくさんあります。それはまだ長い痛いプロセスです。 –

+2

あなたはもう始めるのが良いでしょう。ソースコードが複雑すぎるため、ワンクリックで解決できるソリューションが存在する可能性があります。あなたは基本的に自分でそれをやらなければなりません。 – trojanfoe

答えて

3

Xcodeは、テキスト検索と置換も提供しています。これは個々のリファクタよりも高速ですが、最終的には自動化されていません。関連する依存関係/ソース(可能な場合)にプロジェクトを最初に最小化することで、ステップバイステップのリファクタリングをより迅速に行うことができます。

ただし、ライブラリ内の宣言の名前を変更しても、関連するバイナリのシンボル名は変更されません。バイナリとともに配布されている場合、名前の変更はリンカエラーまたは(場合によっては)ランタイムエラーを引き起こします。

クライアントが使用するサードパーティライブラリを使用する必要がある場合は、ライブラリとアプリケーションをリンクする必要があることを通知し、現在のリリースでサポートされているバージョンを公開するだけです彼らがいくつかの図書館であまりにも先に進んでいれば、彼らはいくつかの追加テストがあることを知っ

+0

私は最後の段落で説明した方法を使用することに決めました。それはこの問題の最もきれいなアプローチのように思えます。ありがとう! –

+0

@RanDahanあなたは大歓迎です:) – justin

-1

私は、あなたのクラスの名前を変更するよりも、Facebookのオープンソースコードをダウンロードし、そこでクラスの名前を変更し、名前を変更したヘッダーファイルのセットで新しい静的ライブラリをコンパイルする方が良いと考えています。次に、衝突が発生していないこと、自分の名前のシンボルを使用していることを確認できます。

このような作業をすると、この特定の問題にどのように対処しても、SDKを悪夢にさせる可能性があります。

tops -verbose replace "FBSession" with "RDFBSession" Sources/*.[hm] 

お持ちの場合:

+1

FB SDKを将来更新する必要があるかもしれないので、これは悪い考えです。もしそうなら、彼は再びFBからすべての名前をつける作業を経なければならないでしょう。彼のクラスの名前を変更するのは難しい作業です。時には、最良のアプローチは容易ではありません。 – stevekohls

+0

クラスの名前をローカルに変更した場合でも、各FB SDKのアップデートごとに再度クラスを行う必要があります。 – Stavash

3

Appleは(C関数、Objective-Cのメソッド、クラス、およびその他のトークンの名前を変更する)スクリプトの大規模なリファクタリングのために設計されてtops(1)と呼ばれるコマンドラインツールを提供します多くの置換えの場合、replace...コマンドのすべてを-scriptfileオプションで渡すファイルに入れることができます。 man pageには、より複雑なコマンド/オプション(および例)に関する詳細情報があります。

関連する問題