通过mac上的gcc编译iOS Objective-C命令行应用程序

Kla*_*aus 16 gcc jailbreak ios

这是一个非常简单的Objective-C控制台应用程序:

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    CLLocationManager *locationManager = [[CLLocationManager alloc] init];
    NSLog(@"Hello world!");

    [pool drain];

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc main.m -o main -ObjC -framework Foundation -framework CoreLocation在Mac上编译它.

我的Mac上也安装了iOS SDK.如何修改此命令以在我的计算机上编译相同的代码,以便在(越狱)iOS设备上使用

然后,我可以通过ssh传输可执行文件并使用它进行签名ldid.

rad*_*iel 18

对于简单的情况,这可能足够好:

gcc -o output -Wall -std=c99 source.m -framework Foundation -lobjc 
Run Code Online (Sandbox Code Playgroud)

更新:

此命令不适用于iOS命令行应用程序 - 必须正确设置arch.我目前没有iOS开发环境; 可能是-march标志会有所帮助.

看到接受的答案.


Tom*_*mmy 4

假设您不习惯陈旧的旧 GCC,故意在我的项目中触发错误,以便进入 Xcode 将显示使用的命令行显示以下编译内容的位置:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -x Objective-c -arch armv6 -fmessage-length=0 -fdiagnostics-print-source-range-info -fdiagnostics-show-category=id -fdiagnostics -parseable-fixits -std=gnu99 -Wno-trigraphs -fpascal-strings -O0 -Wmissing-prototypes -Wreturn-type -Wparentheses -Wswitch -Wno-unused-parameter -Wunused-variable -Wunused-value -DDEBUG=1 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -gdwarf-2 -mthumb "-DIBOutlet=属性((iboutlet))" "-DIBOutletCollection(ClassName)=属性((iboutletcollection(ClassName)) )" "-DIBAction=void)属性((ibaction)" -miphoneos-version-min=3.2 -iquote [簿记文件] -I[标头列表] -iquote [更多标头] -I[包含路径] -fpch-preprocess -F[指向调试文件目录的指针] -include [我的前缀标头] -c AppDelegate.m -o AppDelegate.o

如果您拒绝使用 Xcode,那么我想您至少可以删除有关 Interface Builder 出口的内容。在我的项目中,为 armv6 而不是 v7 构建可能是一个错误。

然后,链接:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L[适当的东西] -F[适当的东西] -filelist [a .LinkFileList] -dead_strip -miphoneos-version-min=3.2 -framework SystemConfiguration -framework UIKit -framework Foundation -framework CoreGraphics -o [适当的东西]

.LinkedFileList 文件似乎只是一个目标文件列表,每行一个。Xcode 已将每个路径的完整路径放在那里,但我猜相对路径是可以接受的。

我知道这不是完整的答案,但希望它有帮助吗?