2011-10-27 26 views
4

我知道Apple不支持在iPhone應用程序中使用動態庫。但是我們正在研究一個內部應用程序,並且我們有一個獨特的要求來使用動態庫。我們的要求是加載一個動態庫作爲「iPhone」應用程序啓動的一部分。我讀到DYLD_INSERT_LIBRARIES是爲了這個目的。所以我編輯了Info.plist並添加了下面的條目。 LSEnvironment DYLD_INSERT_LIBRARIES @ executable_path/sample.dylib DYLD_INSERT_LIBRARIES和iPhone

但它似乎並不奏效。你能讓我知道你的想法嗎?非常感謝你在這方面的幫助。

感謝 --Neo

+0

你有沒有得到這個工作?通過在啓動企業應用程序時運行dylib,我也有一些東西可以被修復得相當優雅。 – Rick

回答

-1

快樂予以糾正,但dylibs不支持,將無法正常工作。您需要獲取庫的代碼並將它們編譯爲arm6/7架構的靜態庫。然後你可以很容易地包含這些庫。有很多靜態庫的例子,XCode也提供了構建它們的目標。

+0

在代碼中使用dylibs沒有問題。我驗證了它的工作方式,如果在構建時包含dylib。我的問題只是更深層次。我需要將dylib作爲應用程序啓動的一部分加載。 PS:如果使用dylib,Apple不會批准該應用程序。正如我前面提到的,我們的要求是開發一個內部應用程序。 – Venky

0

我最近幾天也在研究相同的問題。我也沒有成功按照你嘗試的方式去做。所以我嘗試使用這個鏈接從另一個應用程序啓動我的應用程序: Dynamic Library injection ,不幸的是Apple Block運行多個任務(甚至在iPhone模擬器上),但你可以嘗試,也許你會有更多的運氣。我知道它不是你期望的答案,但也許它會給你一些思考的方式。如果你有進展,請分享。

-1

您可以在運行時加載二進制文件,並且您可以操縱xcode設置,以便爲iOS編譯dylib文件。看到這個答案:

https://stackoverflow.com/a/10509453/784387

+0

我認爲主要想法是包含動態庫,而不具有應用程序代碼(源文件)。 –

4

我已經找到一種方法來成功添加LC_LOAD_DYLIB load命令使用optool一個大男子主義的二進制文件。

$ optool install -c load -p "@executable_path/<dylib_path>" -t <executable> 
$ otool -L <executable> 

在構建optool,確保構建設置OTHER_LDFLAGS包括-ObjC

optool似乎並沒有能夠成功地增加負荷指令爲arm64架構,所以你可能想從二進制

$ lipo <input_file> -remove arm64 -output <output_file> 

編輯刪除arm64
有一個開放的pull request與支持對於arm64。