好久沒碰 Xcode 了,上一次寫這種筆記應該是一年前了吧?昨天把公司的環境打理了一下,下載最新的 Xcode 4.0.2 and iOS SDK 4.3,接著把 iPhone 3G iOS 4.2.1 的機器測一下網路連線,結果會噴訊息:

warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/usr/lib/info/dns.so (file not found).

因為 Xcode 沒有支援 iOS 4.2.1 的環境,接上手機後會從手機上下載相關環境資訊,但偏偏就是沒有 info/dns.so 這個檔案,查了一些文章,解法也只是從 4.2 裡頭複製一份,如此一來就不會出現訊息。

xcode 4.0.2

實際測試時,在 iOS 4.3 模擬器可以正常,但在 iPhone 3G iOS 4.2.1 出錯,一直以為是 DNS 反查失敗,其程式大概如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSData *d = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"TheWebURL"]];
    NSLog(@"%@", d );


    // Override point for customization after application launch.
    // Add the navigation controller's view to the window and display.
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

其中 "TheWebURL" 是比較複雜的網址,如果只是 "http://www.google.com" 這種不會有問題,但如果是 "http://www.google.com.tw/q=?ooxx" 帶有複雜參數且非常長的,看到的是 (null) 的現象,就陷入跑去找到正確的 dns.so 的深淵了。

後來,不知何時跑去印出 NSLog( "NSURL:%@" , [NSURL URLWithString:@"TheWebURL"] ),才發現在機器上也是噴 (null) ,這下可好,就跟 dns.so 沒啥關係了吧?!

急轉而下,改成找 NSURL 回傳是 null 的解法,不一會兒就解掉了:

NSString *url = [[NSString stringWithFormat:@"TheWebURL"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog( "NSURL:%@" , [NSURL URLWithString:url ] );

可以解釋的理由是網址內有特殊符號,在使用上如果丟進較新的瀏覽器時,瀏覽器有的會自動幫你處理,因此,在 iOS 4.3 環境中,NSURL 會自動處理,但是舊版 4.2.1 就沒有了。

至於 dns.so 的問題?看來只有真的碰到時,才能來解了 Orz 又藏了一顆未爆彈。


, , , , , , ,

changyy 發表在 痞客邦 PIXNET 留言(0) 人氣()