国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

修改Xcode配置并支持iPhone上dylib工程 實例

移動開發 iOS
本文介紹的是修改Xcode配置并支持iPhone上dylib工程,一篇不錯的文章,與大家分享一下。先來看內容。

修改Xcode配置并支持iPhonedylib工程是本文要介紹的內容,逛壇子發現一篇好文章,與大家分享一下,先來看內容。此帖純粹討論怎樣更改xcode配置來使其支持創建iphone上的dylib工程文件,不涉及任何其他破解話題!

測試機器:10.6 with Xcode3.2

最近在研究如何創建iphone上的dylib文件,google出來的都是toolchain的東西,使用makefile來編譯的,像我這種習慣IDE的人來說非常之不爽,所以花了一天時間來破解了下Xcode來讓它可以創建編譯iphone上的dylib文件的工程。

簡單說下分析思路吧

首先xcode支持創建iphone static libtary和Cocoa的dynamic linrary的工程,通過不同編譯對比可以發現Xcode通過productType = "com.apple.product-type.library.dynamic";配置來確定工程類型的。

打開**.xcodeproj/project.pbxproj文件,搜索productType=定位,可以發現如下圖所示的內容

[attachment=10545]

可以創建一個iphone的static工程把static改成dynamic編譯看看,可以發現xcode提示不支持dynamic類型的工程,無法編譯,那我們讓他支持就好了。

我們需要修改以下文件

  1. /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications/iPhoneOSProductTypes.xcspec  
  2. /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications/iPhoneOSPackageTypes.xcspec  
  3. 在iPhoneOSProductTypes.xcspec中添加下列片段  
  4.  
  5. // Dynamic library  
  6.     {   Type = ProductType;  
  7.         Identifier = com.apple.product-type.library.dynamic;  
  8.         Class = PBXStaticLibraryProductType;  
  9.         Name = "Dynamic Library";  
  10.         Description = "Dynamic library";  
  11.         IconNamePrefix = "TargetLibrary";  
  12.         DefaultTargetName = "Dynamic Library";  
  13.         DefaultBuildProperties = {  
  14.             FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";  
  15.             MACH_O_TYPE = "mh_dylib";  
  16.             REZ_EXECUTABLE = YES;  
  17.             EXECUTABLE_PREFIX = "";  
  18.             EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)";  
  19.             EXECUTABLE_EXTENSION = "dylib";  
  20.             PUBLIC_HEADERS_FOLDER_PATH = "/usr/local/include";  
  21.             PRIVATE_HEADERS_FOLDER_PATH = "/usr/local/include";  
  22.             INSTALL_PATH = "/usr/local/lib";  
  23.             DYLIB_INSTALL_NAME_BASE = "$(INSTALL_PATH)";  
  24.             LD_DYLIB_INSTALL_NAME = "$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)";  
  25.             DYLIB_COMPATIBILITY_VERSION = "1";  
  26.             DYLIB_CURRENT_VERSION = "1";  
  27.             FRAMEWORK_FLAG_PREFIX = "-framework";  
  28.             LIBRARY_FLAG_PREFIX = "-l";  
  29.             LIBRARY_FLAG_NOSPACE = YES;  
  30.             STRIP_STYLE = "debugging";  
  31.             GCC_INLINES_ARE_PRIVATE_EXTERN = YES;  
  32.             CODE_SIGNING_ALLOWED = NO;  
  33.         };  
  34.         PackageTypes = (  
  35.             com.apple.package-type.mach-o-library   // default  
  36.         );  
  37.     },  
  38.  
  39. 在iPhoneOSPackageTypes.xcspec中添加下列片段  
  40.  
  41. // Mach-O dynamic library  
  42.     {   Type = PackageType;  
  43.         Identifier = com.apple.package-type.mach-o-library;  
  44.         Name = "Mach-O Dynamic Library";  
  45.         Description = "Mach-O dynamic library";  
  46.         DefaultBuildSettings = {  
  47.             EXECUTABLE_PREFIX = "";  
  48.             EXECUTABLE_SUFFIX = ".dylib";  
  49.             EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";  
  50.             EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";  
  51.         };  
  52.         ProductReference = {  
  53.             FileType = compiled.mach-o.dylib;  
  54.             Name = "$(EXECUTABLE_NAME)";  
  55.             IsLaunchable = NO;  
  56.         };  
  57.     }, 

文件附上,可以直接下載替換,替換/修改前做好備份

[attachment=10546]

現在再編譯應該不會提示工程不支持了,那么剩下的就是改變其編譯選項了,就是libtool的參數問題。

我們需要修改下列文件

  1. /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/Libtool.xcspec  
  2. /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneOS Build System Support.
  3. xcplugin/Contents/Resources/iPhoneLinkerOptions.xcspec  
  4. 在Libtool.xcspec中添加下列片段  
  5.  
  6. {   Identifier = com.apple.pbx.linkers.libtooldynamic;  
  7.     Type = Linker;  
  8.     Class = PBXLinkerSpecificationLibtool;  
  9.     Name = "Libtool";  
  10.     Description = "Create a dynamic library using Apple Mach-O Librarian (libtool)";  
  11.     IsAbstract = Yes;       // This is an internal tool, so we keep it out of the user interface  
  12.     BinaryFormats = (mach-o);  
  13.     Architectures = (ppc, ppc7400, ppc7450, ppc970, ppc64, i386, x86_64);  
  14.     CommandLine = "$(LIBTOOL) -dynamic -arch_only $(arch) -compatibility_version $(DYLIB_COMPATIBILITY_VERSION) 
  15. -current_version $(DYLIB_CURRENT_VERSION) [options] [special-args] -o $(OutputPath)";     
  16.  // 'special-args' includes the input files  
  17.     RuleName = "Libtool $(OutputPath) $(variant) $(arch)";  
  18.     ExecDescription = "Create Dynamic Library $(OutputPath:file)";  
  19.     InputFileTypes = (  
  20.         compiled.mach-o.objfile  
  21.     );  
  22.     Outputs = (  
  23.         // We're a linker-like task, so we expect to be given an output path in 'OutputPath'.  
  24.         "$(OutputPath)"  
  25.     );  
  26.     CommandOutputParser = XCGccCommandOutputParser;  
  27.     Options = (  
  28.         // LIBTOOL  
  29.         {   Name = LIBTOOL;  
  30.             Type = Path;  
  31.             DefaultValue = "$(PLATFORM_DEVELOPER_BIN_DIR)/libtool";  
  32.         },  
  33.  
  34.         // SDK  
  35.         {   Name = SDKROOT;  
  36.             Type = Path;  
  37.             CommandLineFlag = "-syslibroot";  
  38.             IsInputDependency = Yes;  
  39.         },  
  40.  
  41.         // Search paths  
  42.         {   Name = LIBRARY_SEARCH_PATHS;  
  43.             Type = PathList;  
  44.             FlattenRecursiveSearchPathsInValue = Yes;   // causes any paths that have a '/**' suffix to be replaced with matching paths  
  45.             CommandLinePrefixFlag = "-L";  
  46.         },  
  47.  
  48.         // Input file lists  
  49.         {   Name = __INPUT_FILE_LIST_PATH__;  
  50.             Type = Path;  
  51.             DefaultValue = "$(LINK_FILE_LIST_$(variant)_$(arch))";      // this is set up for us as a read-only property  
  52.             CommandLineFlag = "-filelist";  
  53.             IsInputDependency = Yes;  
  54.         },  
  55.         {   Name = auxiliary_file_lists;  
  56.             Type = PathList;  
  57.             CommandLineFlag = "-filelist";  
  58.             IsInputDependency = Yes;  
  59.         },  
  60.  
  61.         // Various flags  
  62.         {   Name = ALL_OTHER_LIBTOOLFLAGS;  
  63.             Type = StringList;  
  64.             DefaultValue = "$(LD_FLAGS) $(SECTORDER_FLAGS) $(OTHER_LDFLAGS) $(OTHER_LDFLAGS_$(variant))
  65.   $(OTHER_LDFLAGS_$(arch)) $(OTHER_LDFLAGS_$(variant)_$(arch)) $(OTHER_LIBTOOLFLAGS) $(OTHER_LIBTOOLFLAGS_$(variant)) 
  66. $(OTHER_LIBTOOLFLAGS_$(arch)) $(OTHER_LIBTOOLFLAGS_$(variant)_$(arch)) $(PRODUCT_SPECIFIC_LIBTOOLFLAGS)";  
  67.             CommandLinePrefixFlag = "";  
  68.         },  
  69.         {   Name = EXPORTED_SYMBOLS_FILE;  
  70.             Type = Path;  
  71.             Condition = "$(SEPARATE_SYMBOL_EDIT) == NO";  
  72.             CommandLineFlag = "-exported_symbols_list";  
  73.             IsInputDependency = Yes;  
  74.         },  
  75.         {   Name = UNEXPORTED_SYMBOLS_FILE;  
  76.             Type = Path;  
  77.             Condition = "$(SEPARATE_SYMBOL_EDIT) == NO";  
  78.             CommandLineFlag = "-unexported_symbols_list";  
  79.             IsInputDependency = Yes;  
  80.         },  
  81.         {   Name = AdditionalCommandLineArguments;  
  82.             Type = StringList;  
  83.             CommandLinePrefixFlag = "";  
  84.         },  
  85.  
  86.         {   Name = MACOSX_DEPLOYMENT_TARGET;  
  87.             Type = String;  
  88.             SetValueInEnvironmentVariable = "MACOSX_DEPLOYMENT_TARGET";  
  89.         },  
  90.     );  
  91. }, 

在iPhoneLinkerOptions.xcspec中搜索

  1. BasedOn = "default:com.apple.pbx.linkers.libtool"

替換成

  1. BasedOn = "default:com.apple.pbx.linkers.libtooldynamic"

這樣修改后編譯iphone的library工程師都會使用dynamic的參數來編譯,

注意:如果要編譯iphone static library這里需要將libtooldynamic修改回libtool并重啟Xcode(***的小缺陷,應該可以通過hook xcode編譯設置函數來動態修改,很麻煩,需要很多時間去找到相應的方法,找了一會兒就沒高興繼續,先將就用吧)

做好以上工作后就可以創建并編譯iphone上dynamic library的工程了。

這里附上工程和target模板文件

  1. [attachment=10547

解壓此zip得到Cocoa Touch Dynamic Library文件夾,將其放到

  1. /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Library/下面  
  2. [attachment=10548

解壓此zip得到Dynamic Library.trgttmpl文件,將其放到

  1. /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Target Templates/Cocoa Touch/下面 

重啟Xcode就可以看到了,如圖

  1. [attachment=10549]  [attachment=10550]  

測試結果

  1. [attachment=10551]  

使用otool查看編譯出來的dylib文件

  1. [attachment=10552]  

成功!

謹記!!!!!需要修改文件來切換回編譯static library!!!

小結:關于修改Xcode配置并支持iPhonedylib工程的內容介紹完了,希望本文對你有所幫助,更多相關內容請參考便捷而推薦。

責任編輯:zhaolei 來源: 博客園
相關推薦

2011-07-27 14:56:07

iPhone Makefile Dylib

2011-08-08 17:31:30

Xcode 工程

2011-08-04 17:24:12

iPhone開發 Xcode 窗口

2011-07-06 18:10:20

Xcode 4 iPhone

2011-07-07 15:32:07

2011-07-06 15:44:26

iPhone XCode Leopard

2011-07-06 17:53:40

iPhone SDK Xcode

2011-07-07 09:20:30

Xcode

2023-02-08 18:08:16

2011-07-06 18:31:21

Xcode 4 iPhone 模擬器

2011-07-07 17:36:13

iPhone Xcode 窗口

2011-07-06 17:48:30

iPhone Xcode 模擬器

2011-08-04 17:19:49

iPhone開發 Xcode 文檔

2011-07-22 18:25:20

XCode iPhone SDK

2011-07-20 10:12:33

XCode Cocoa dylib

2011-07-25 18:02:51

iPhone LibFetion 移植

2011-07-18 17:52:47

Linux iPhone

2019-04-22 11:50:38

LinuxFlatpak

2011-07-20 10:59:46

2011-07-06 11:30:14

xcode
點贊
收藏

51CTO技術棧公眾號

亚洲电影成人av99爱色| 黄色漫画在线免费观看| 国产精品h片在线播放| 国产午夜电影| 久久久国产午夜精品| 亚洲人成伊人成综合网久久久| www.18av.com| 色综合天天综合在线视频| 爆乳熟妇一区二区三区霸乳| 日本a级不卡| 国产精品扒开腿做爽爽爽的视频| www.日韩.com| 亚洲男人网站| 93在线视频精品免费观看| 欧美中文字幕在线观看| 欧美男男gaygay1069| 日日夜夜精品网站| 天堂日韩电影| 日韩欧美国产麻豆| 亚洲成人久久一区| 蜜桃一区二区三区| 久久精品国产99国产精品澳门| 欧美精品综合| 91色琪琪电影亚洲精品久久| av一区二区在线播放| 亚洲人成在线免费观看| 国产精品夜夜爽| 精品一区2区三区| 一区二区三区国产盗摄| 欧美精品国产精品久久久| 久久九九久精品国产免费直播| www亚洲国产| 韩国成人在线视频| 国产卡一卡二在线| 精东粉嫩av免费一区二区三区| 伊人75在线| 色综合久久久久| 亚洲美女15p| 久久午夜老司机| 日韩精品第1页| 国产精品传媒精东影业在线| 亚洲www视频| 亚洲国产国产| 99视频精品全部免费看| 亚洲区一区二区| 久久亚洲精品伦理| 国产免费一区二区| 欧美激情日韩| 毛片.com| 国产精品欧美久久久久无广告| 色佬视频在线观看| 一本久久a久久免费精品不卡| 亚洲mv在线看| 欧美精品免费视频| 天堂av最新在线| 亚洲人精选亚洲人成在线| 久久激情综合| 欧美国产日韩激情| 亚洲精品日韩综合观看成人91| 亚洲成av人影片在线观看| 2018日韩中文字幕| 午夜精品免费| 日本福利视频导航| 日韩电影免费在线观看中文字幕 | 亚洲大片一区二区三区| 黄色网页在线观看| 色老头一区二区三区在线观看| 美国一区二区| 欧美动漫一区二区| 日韩情涩欧美日韩视频| 成人黄色理论片| 亚洲一区二区三区在线免费观看| 亚洲国产成人porn| 久久精品久久久| 无码人妻精品一区二区蜜桃网站| 一区二区在线看| 9999精品成人免费毛片在线看| 91国内产香蕉| 久久xxxx| 国产传媒在线观看| 国产ts一区二区| 亚洲成人精品一区二区| 欧美日韩四区| free性m.freesex欧美| 黄色一级视频播放| 欧美老女人性生活| 首页国产欧美日韩丝袜| 涩涩视频在线播放| 亚洲一区亚洲二区亚洲三区| 欧美日韩亚洲综合在线 | 女人高潮特级毛片| 国产免费一区二区三区在线能观看| 久久精品72免费观看| 久草热久草在线频| 成人免费视频视频在| 91麻豆精品秘密| 黄av在线免费观看| 福利在线小视频| 欧美激情视频播放| 美国一区二区三区在线播放| 精品美女一区| 午夜激情影院| 久久国产精品电影| 日本不卡一二三区黄网| 国产精品一二三区视频| 欧美一区二区三区艳史| 午夜久久久久久| 免费观看亚洲视频大全| 日韩精彩视频| 欧美日韩综合色| 国产1区2区3区精品美女| yjizz视频网站在线播放| 久久久久久久久亚洲| 精品一区二区三区av| 欧美白人做受xxxx视频| 欧美亚洲国产视频| 欧美日韩一级二级三级| 337p粉嫩大胆噜噜噜噜噜91av| 成人激情开心网| 123区在线| 能在线观看av网站| 一本一道久久久a久久久精品91| 色呦呦网站一区| 亚洲国产成人精品一区二区| 欧美老女人在线| 西野翔中文久久精品字幕| 亚瑟国产精品| 成人精品小视频| 尤物国产在线观看| 91国内精品久久| 色综合久久88色综合天天看泰| 亚洲最大的免费| 亚洲影院天堂中文av色| 色多多视频在线观看| 91在线网站视频| 在线播放日韩专区| 精品一区二区三区在线播放| 国产成人一区| 国产超碰在线观看| 91成人在线视频观看| 国产视频999| 亚洲一区二区五区| 精品在线观看入口| 在线能看的av网址| a级片一区二区| 亚洲专区中文字幕| 免费av一区二区| 欧美成人aa大片| 久久激情五月婷婷| 天天久久综合| 日韩欧洲国产| 91插插插插插插插插| 欧美一区二区在线| 精品日韩一区二区三区| 一区二区在线电影| 2024国产精品| 久久福利视频一区二区| 91精品国产乱码久久久久久久| 日韩精品一级| 亚洲成a人片| 1024av视频| 九九精品视频在线观看| 羞羞色午夜精品一区二区三区| 欧美另类老肥妇| h视频在线免费| 三上悠亚在线观看二区| wwwwww.色| 国产精品久久久久久久久久久久久| 国产日韩欧美综合一区| 久久天堂久久| 亚洲美女尤物影院| 黄色片网站在线观看| 男人的天堂在线视频| 丝袜国产免费观看| www.com黄色片| 国产亚洲精品网站| 91av免费观看91av精品在线| 在线日韩中文字幕| 国产精品美女久久久久久久| 国产一区二区美女诱惑| 136福利精品导航| 视频一区二区在线播放| 超级污的网站| 成人au免费视频影院| av在线亚洲男人的天堂| 欧美mv日韩mv国产网站app| 色综合久久久久综合体| 亚洲成在人线在线播放| 亚洲精品精品亚洲| 国产精品第五页| 欧美激情麻豆| 天天揉久久久久亚洲精品| 日本a级不卡| 日韩欧美一区二区三区在线视频| 日本精品一区二区三区在线播放| 亚洲一区在线日韩在线深爱| 最新版sss视频在线| 一本久道久久综合| 亚洲一区二区三区色| 国产日本欧美在线|