❶ ios 怎麼配置編譯ffmpeg
IOS上編譯ffmpeg需要先下載兩個程序:iFrameExractor和ffmpeg
編譯步驟:
1、在終端下: cd /iFrameExtractor/ffmpeg 建議開始就執行 sudo -s (獲取許可權命令)
2、在終端下輸入 ./configure --prefix=/iFrameExtractor/ffmpeg --libdir=iFrameExtractor/ffmpeg/lib --enable-gpl --enable-static --disable-shared --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-pthreads
3、執行make 這里會有一堆的編譯情況。
註:最好先升級Command Line Tools,避免編譯錯誤
4、執行make install。 (執行完後 到iFrameExtractor/ffmpeg/lib文件上去看看)
出現 libavcodec libavdevice libavformat libavutil libswscale5個.a文件
5、用xcode 打開iFrameExractor工程,確認Header Search Paths里有:"$(SRCROOT)/ffmpeg"路徑。 $(SRCROOT)表示工程路徑。同時可以看到iFrameExractor工程下ffmpeg文件下的.a文件都不是紅色的了。
6、真機上編譯(模擬器上i386,真機上是arm的,真機還分arm6 和arm7 )
以下是針對arm7的
/configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-cross-compile --arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' -- sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk' --enable-pic
7、執行 make 和make install 就有上面的幾個.a文件,至此編譯結束。
❷ 如何把iOS代碼編譯為Android應用
看開發時使用的什麼模式。
如果是使用object C,那沒法跨平台編譯,也就無法直接轉換。
如果使用的一些支持跨平台的第三方庫,比如cocos2dx,那在安卓和ios下都是可以編譯的。
一款名為「J2ObjC」的源代碼轉換工具,可將Java語言編寫的程序轉換稱Object-C語言,並直接使用iOS框架,這意味著Android上的程序可以直接轉換成iOS App。
❸ ios 能編譯動態庫嗎
一、創建FrameWork工程
新建工程,選擇創建FrameWork工程或者靜態庫(Static Library)。
❹ 怎麼試運行iOS軟體的源代碼
分析一款ios應用的源代碼方法如下:
1、首先提取整個應用文件的二進制代碼,建立for循環將機器所有字元串進行排列組合並標記後編譯。
2、再建立for將應用文件二進制代碼同所有的字元串排列組合編譯成的二進制文件進行對比。
3、最後通過標記就能找到應用的源代碼。
❺ ios 開發怎麼用代碼生成xml文件
在ios開發中,可以使用GDataXML生成xml
GDataXML只有兩個文件GDataXMLNode.h和GDataXMLNode.m。使用方法如下:
將文件包含進工程後,添加libxml2.dylib:
現在可以編寫代碼了:
#import"GDataXMLNode.h"
// 創建一個根標簽
GDataXMLElement *rootElement = [GDataXMLNode elementWithName:@"root"];
// 創建一個屬性
GDataXMLElement *attribute = [GDataXMLNode attributeWithName:@"a" stringValue:@"b"];
// 創建一個標簽元素
GDataXMLElement *element = [GDataXMLNode elementWithName:@"user" stringValue:@"HelloWorld"];
// 把標簽與屬性添加到根標簽中
[rootElement addAttribute:attribute];
[rootElement addChild:element];
// 生成xml文件內容
GDataXMLDocument *xmlDoc = [[GDataXMLDocument alloc] initWithRootElement:rootElement];
NSData *data1 = [xmlDoc XMLData];
NSString *xmlString = [[NSString alloc] initWithData:data1 encoding:NSWindowsCP1253StringEncoding];
NSLog(@"xmlString %@", xmlString);
結果:
<?xml version="1.0"?>
<root a="b"><user>HelloWorld</user></root>
❻ xcode 如何編譯
Xcode 常用編譯選項設置
在xcconfig文件中指定即可。
用標准庫連接
LINK_WITH_STANDARD_LIBRARIES = YES如果激活此設置,那麼編譯器在鏈接過程中會自動使用通過標准庫的鏈接器。
Info.plist 輸出編碼
INFOPLIST_OUTPUT_FORMAT = binary指定Info.plist文件的輸出編碼(默認情況下,輸出與輸入的編碼保持不變),這個輸出編碼能指定「binary」或者「XML」。
生 成調試符號GCC_GENERATE_DEBUGGING_SYMBOLS = NO當啟用的時候,詳情等級能夠通過build的』Level of Debug Symbols』設置去控制。 隱藏內聯方法GCC_INLINES_ARE_PRIVATE_EXTERN = YES Objective-C GCGCC_ENABLE_OBJC_GC = Unsupported 優化級別GCC_OPTIMIZATION_LEVEL = Fastest, Smallest [-OS]
None: 不做優化使用這個設置,編譯器的目標是減少編譯成本,使調試產生預期的結果。
Fast:優化編譯將為大函數佔用更多的時間和內存使用這個設置,編譯器將嘗試減少代碼的大小和執行時間,不進行任何優化,需要大量編譯時間。
Faster:編譯器執行幾乎所有支持的優化,它不考慮空間和速度之間的平衡與「Fast」設置相比,該設置會增加編譯時間和生成代碼的性能。編譯器不進行循環展開、內聯函數和寄存器變數的重命名。
Fastest:開啟「Faster」支持的所有的優化,同時也開啟內聯函數和寄存器變數的重命名選項
Fastest,smallest:優化代碼大小這個設置啟用「Faster」所有的優化,一般不增加代碼大小,它還執行旨在減小代碼大小的進一步優化。
C 語言方言GCC_C_LANGUAGE_STANDARD = C89 警告 檢查Switch語句GCC_WARN_CHECK_SWITCH_STATEMENTS = YES 隱藏局部變數GCC_WARN_SHADOW = YES 隱式轉換成32位的類型GCC_WARN_64_TO_32_BIT_CONVERSION = YES 未完成的Objective-C協議GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES 抑制所有的警告GCC_WARN_INHIBIT_ALL_WARNINGS = NO 初始化時沒有完整的括弧GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES例子(a沒有完全的括弧,b有):
int a[ 2 ][ 2 ] = { 0, 1, 2, 3 };
int b[ 2 ][ 2 ] = { { 0, 1 }, { 2, 3 } };
不匹配的返回類型
GCC_WARN_ABOUT_RETURN_TYPE = YES 缺少括弧GCC_WARN_MISSING_PARENTHESES = YES例子:
{
if( a )
if( b )
foo();
else
bar();
}
{
if( a )
{
if( b )
foo();
else
bar();
}
}
在結構體初始化時缺少欄位
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES
缺 少函數原型GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES 在文件結尾缺少新行GCC_WARN_ABOUT_MISSING_NEWLINE = YES 選擇了多個定義的類型(@Selector)GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO 嚴格的Selector匹配GCC_WARN_STRICT_SELECTOR_MATCH = YES 把缺少函數原型當作錯誤GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES 把所有的警告當作錯誤GCC_TREAT_WARNINGS_AS_ERRORS = YES 未定義的SelectorGCC_WARN_UNDECLARED_SELECTOR = YES 未初始化的自動變數GCC_WARN_UNINITIALIZED_AUTOS = YES 未知的Pragma指令GCC_WARN_UNKNOWN_PRAGMAS = YES 未使用的函數GCC_WARN_UNUSED_FUNCTION = YES 未使用的標簽GCC_WARN_UNUSED_LABEL = YES 未使用的參數GCC_WARN_UNUSED_PARAMETER = YES 未使用的值GCC_WARN_UNUSED_VALUE = YES當一個語句計算的結果顯式的未使用的時候發出警告 未使用的變數GCC_WARN_UNUSED_VARIABLE = YES 警告-所有過時的函數GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES offsetof宏未定義使用的警告GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES
iphone 常用的<app>-info.plist設置
Application requires iPhone environment如 果應用程序不能在ipod touch上運行,設置此項為true;
Application uses Wi-Fi如果應用程序需要wi-fi才能工作,應該將此屬性設置為true。這么做會提示用戶,如果沒有打開wi-fi的話,打開wi-fi。為了節省 電力,iphone會在30分鍾後自動關閉應用程序中的任何wi-fi。設置這一個屬性可以防止這種情況的發生,並且保持連接處於活動狀態
Bundle display name這用於設置應用程序的名稱,它顯示在iphone屏幕的圖標下方。應用程序名稱限制在10-12個字元,如果超出,iphone將縮寫名 稱。
Bundle identifier這個為應用程序在iphone developer program portal web站點上設置的唯一標識符。(就是你安裝證書的時候,需要把這里對應修改)。
Bundle version這個會設置應用程序版本號,每次部署應用程序的一個新版本時,將會增加這個編號,在app store用的。
Icon already includes gloss and bevel effects默認情況下,應用程序被設置了玻璃效果,把這個設置為true可以阻止這么做。
Icon file(這個不用多說了)設置應用程序圖標的。
Main nib file base name應用程序首次啟動時載入的xib文件 這個基本用不到。
Initial interface orientation 確定了應用程序以風景模式還是任務模式啟動
Localizations多語言。應用程序本地化的一列表,期間用逗號隔開,例如 應用程序支持英語 日語,將會適用 English,Japanese. Status bar is initially hidden 設置是否隱藏狀態欄。你懂的。
Status bar style選擇三種不同格式種的一種。
URL types應用程序支持的url標識符的一個數組。
用URL Scheme進行程序跳轉
打開info.plist,添加一項URL types
展開URL types,再展開Item1,將Item1下的URL identifier修改為URL Scheme
展開URL Scheme,將Item1的內容修改為myapp
其他程序可通過myapp://訪問此自定義URL
參考:http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
IOS後台播放音樂
OS後台播放只是在IOS4.0以後的版本支持。
1,設置後台播放會話
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory: error:nil];
2,在info.plist裡面添加
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
靜態庫沒法包含category/分類?
如果你導入一個objc靜態庫,發現很多objc的category 不能調用,可以嘗試在主工程中加入linker選項:
-all_load 加入這個一般就夠了
-ObjC
讓程序最小化再開啟時,從頭開始:
按下 「Home」 鍵以後程序可能並沒有退出而是轉入了後台運行。如果您想讓應用直接退出,最簡單的方法是:在 info-plist 裡面找到 Application does not run in background 一項,勾選即可。
程序退出後任務欄還是有圖標,但是程序原來的所有運行狀態全部丟失,點擊任務欄圖標也不過相當於再次啟動程序;如果允許後台運行,點擊任務欄圖標後會恢復程序中斷時的界面。
本地化字元串:
在infoPlist.strings裡面寫
「string1″=」水果」
代碼裡面寫 myLabel.text = NSLocalizedString(@」string1″, nil);
本地化的Bundle display name:
1)創建一個空文件,取名為InfoPlist.strings
2)對InfoPlist.strings進行本地化(Get Info -> Make Localization),然後設置需要的語言(如中文zh)
3)編輯不同的InfoPlist.strings文件,設置顯示名字
CFBundleDisplayName = 「名字」;
4)(這步不做貌似也可以)編輯Info.plist,添加一個新的屬性Application has localized display name, 設置其類型為boolean,並將其value設置為選中狀態
default圖片的銜接問題:
程序開始後,手動載入default圖片,然後進行過渡效果即可。
遍歷目錄:
NSString *appDocDir = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] relativePath];NSArray *contentOfFolder = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:appDocDir error:NULL];for (NSString *aPath in contentOfFolder) { NSLog(@"apath: %@", aPath); NSString * fullPath = [appDocDir :aPath]; BOOL isDir; if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir) { [fileList addObject:aPath]; }}
IB:
不論寫不寫property的retain,由IBOutlet都會為對象加一個retainCount,所以只要連接了,就需要在viewDidUnload與dealloc中release並適當置為nil。
預先在IB裡面載入好的文件(比如圖片),即使釋放了Controller,IB中的文件也不會被釋放,直至內存警告,解決辦法是較大的資源用代碼載入。
UIWebView:
用代碼載入UIWebView的內容,navigationType是UIWebViewNavigationTypeOther
CAAnimation:
一定要記得[self.view.layer removeAllAnimations];因為CAAnimation會retain它的delegate
設備型號識別,可通過審核:
+ (NSString*)getDeviceVersion{ size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = (char*)malloc(size); sysctlbyname("hw.machine", machine, &size, NULL, 0); NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; free(machine); return platform;}
輸出:
//@」iPad1,1″
//@」iPad2,1″
//@」i386″
逗號後面數字解釋:(i386是指模擬器)
1-WiFi版
2-GSM/WCDMA 3G版
3-CDMA版
AppleTV(2G) (AppleTV2,1)
iPad (iPad1,1)
iPad2,1 (iPad2,1)Wifi版
iPad2,2 (iPad2,2)GSM3G版
iPad2,3 (iPad2,3)CDMA3G版
iPhone (iPhone1,1)
iPhone3G (iPhone1,2)
iPhone3GS (iPhone2,1)
iPhone4 (iPhone3,1)
iPhone4(vz) (iPhone3,3)iPhone4 CDMA版
iPhone4S (iPhone4,1)
iPodTouch(1G) (iPod1,1)
iPodTouch(2G) (iPod2,1)
iPodTouch(3G) (iPod3,1)
iPodTouch(4G) (iPod4,1)
判斷ipad/iphone
12UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPadUI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone
或者
1[[[UIDevice currentDevice] model] isEqualToString:@"iPad"];
判斷設備是否有攝像頭
1[UIImagePickerController isSourceTypeAvailable:];
❼ 如何將 lame 從源代碼編譯成 iOS App 可用的靜態庫
生成的靜態庫包括armv6 armv7 模擬器 以及一個合並的庫
你需要做的是:
1、http://sourceforge。net/projects/lame/files/lame/3.99/ 下載lame的最新版本解壓
2、將該文件lamebuilder放到目錄下
3、修改lamebuilder中的路徑
--prefix=/Users/rinjack/Desktop/lame
為你的lame目錄路徑
4、在終端中 cd到 你的lame目錄
sudo -s
chmod a+x lamebuilder
./lamebuilder
5、生成的文件在build目錄下
❽ 如何編譯打包iOS系統
選擇「Build Phases」選項卡
點擊紅框標注的「+」按鈕
3
在彈出的菜單中選擇「New Run Script Phase..."
4
修改名稱,單擊紅框標注的「Run Script",此處是為了增加編譯號,所以名稱我就改成了Build Number
5
在紅框標注的輸入框中輸入:
❾ ios怎麼自動生成model裡面的屬性代碼
一、獲取Model的實體屬性1.要想遍歷Model類的屬性,首先得通過Runtime來獲取該Model類有哪些屬性,輸出Model的所有屬性的值可不像遍歷Dictionary和Array那樣一個for循環搞定的,下面的方法是通過Runtime來獲取Model類的屬性字元串,並以數組的形式返回。代碼如下:///通過運行時獲取當前對象的所有屬性的名稱,以數組的形式返回-(NSArray*)allPropertyNames{///存儲所有的屬性名稱NSMutableArray*allNames=[[NSMutableArrayalloc]init];///存儲屬性的個數unsignedintpropertyCount=0;///通過運行時獲取當前類的屬性objc_property_t*propertys=class_PropertyList([selfclass],&propertyCount);//把屬性放到數組中for(inti=0;i<propertyCount;i++){///取出第一個屬性objc_property_tproperty=propertys[i];constchar*propertyName=property_getName(property);[allNamesaddObject:[NSStringstringWithUTF8String:propertyName]];}///釋放free(propertys);returnallNames;}2.獲取到Model類的屬性方法後需要把屬性字元串生成get方法,我們可以執行get方法來獲取Model屬性的值,下方的方法是根據屬性字元串來獲取屬性的getter方法,OC中屬性的getter方法的名字和屬性的名字是一致的,生成getter方法比較簡單,具體代碼如下:#pragmamark--通過字元串來創建該字元串的Setter方法,並返回-(SEL)creatGetterWithPropertyName:(NSString*)propertyName{//1.返回get方法:oc中的get方法就是屬性的本身returnNSSelectorFromString(propertyName);}二、Get方法的執行接下來要做的是通過Runtime來執行Getter方法,這一塊需要通過方法的簽名來執行Getter方法。在OC的運行時中要執行的方法需要傳入參數或者需要接收返回值時,需要通過方法的簽名來調用方法。下面的代碼就是創建方法的簽名,然後通過簽名來獲取調用的對象,在下邊的方中回調用上述兩個方法在通過方法的簽名來獲取Model屬性的值,具體代碼如下:-(void)displayCurrentModleProperty{//獲取實體類的屬性名NSArray*array=[selfallPropertyNames];//拼接參數NSMutableString*resultString=[[NSMutableStringalloc]init];for(inti=0;i<array.count;i++){//獲取get方法SELgetSel=[:array[i]];if([selfrespondsToSelector:getSel]){//獲得類和方法的簽名NSMethodSignature*signature=[:getSel];//從簽名獲得調用對象NSInvocation*invocation=[:signature];//設置target[invocationsetTarget:self];//設置selector[invocationsetSelector:getSel];//接收返回的值NSObject*__unsafe_unretainedreturnValue=nil;//調用[invocationinvoke];//接收返回值[invocationgetReturnValue:&returnValue];[resultStringappendFormat:@"%@\n",returnValue];}}NSLog(@"%@",resultString);}執行上述方法就可以輸入Model中的屬性的值,下面就在main函數中對Model賦完值後調用上述方法輸出一下Model的屬性值,調用代碼如下所示:BeautifulGirlModel*beautifulGirl=[:data];[];運行結果如下,下面的輸出結果是Model中屬性的值。