越獄開發-創建真正的后台程序(Daemon Process)


在網上搜索了一下如何在IOS上面實現Daemon Process,只有chrisalvares的博客中有過詳細的描述,但是其博客中描述的較為復雜,

參考stackoverflow中的一個問答:

http://stackoverflow.com/questions/13345686/ios-daemon-app-will-not-start-jailbreak-how-to-debug

 

綜合上面的實現方案,下面給出本人的實現:

IOS Daemon的實現分為兩個部分,一個是守護程序的可執行文件,一個是描述可執行文件的plist。

可執行文件可以使用XCode來編寫,普通的命令行程序就可以了,下面是本人的實現代碼:

#import <Foundation/Foundation.h>
#import "NetworkTools.h"
#import "TSLogger.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!, %@",[NetworkTools ipAddr]);
        
        [[TSLogger shanreInstance] connect];

        NSTimer *timer = [NSTimer timerWithTimeInterval:5
                                                 target:[TSLogger shanreInstance]
                                               selector:@selector(beat:)
                                               userInfo:nil
                                                repeats:YES];
        [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
        [[NSRunLoop mainRunLoop] run];
        while (YES) {
            [[NSRunLoop mainRunLoop] runUntilDate:[NSDate distantFuture]];
        }
        
    }
    return 0;
}

 這里避免主線程結束,在runloop中添加了一個timer,這個timer什么事情也沒有做,主要是避免runloop結束。

 上面的主程序中,就可以在主線程中異步執行一些事件,本人的代碼中所做的事情是向服務器每隔2s發送一個數字,這個數字累加。

下面是累加的結果:

編寫這個控制台程序的時候,注意需要將工程的CPU架構設置為armv7,armv7s,不然會遇到 bad cpu type的錯誤。

第二個部分是plist,plist中描述了守護程序的位置,已經啟動的參數,然后將這個plist拷貝到/System/Library/LaunchDaemons/

下面是程序的plist:

 

參考資料:

http://blog.csdn.net/yiyaaixuexi/article/details/8293020

注:請不要利用上面博客中的代碼、用於非法目的。博客中思路僅供學習研究IOS系統實現,提高IOS開發技能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM