簡體   English   中英

iOS模擬器崩潰而真實設備沒有崩潰

[英]iOS Simulator crashes while real device does not

我正在開發一個項目,其中包括由Cocoapods集成為pod的幾個庫 - 它已經有一段時間但我認為這個錯誤首先出現在我整合Cocoapods並且從那時起就沒有消失(所以我開始使用真實的設備進行測試我的建設)。

就像我提到的,我在任何真實設備上構建都沒有問題但是在iOS模擬器上構建時我經常遇到以下錯誤。 Xcode成功完成構建並啟動模擬器,然后在嘗試加載構建時立即崩潰。

dyld: Symbol not found: _ACAccountTypeIdentifierTwitter
  Referenced from: .../Library/Developer/CoreSimulator/Devices/28482AD6-B0F2-4FBF-B525-C1EA3F2E07FA/data/Containers/Bundle/Application/D9992D1D-FE14-4403-A9DC-E5C1BB787E9E/projectName.app/projectName
  Expected in: flat namespace
 in .../Library/Developer/CoreSimulator/Devices/28482AD6-B0F2-4FBF-B525-C1EA3F2E07FA/data/Containers/Bundle/Application/D9992D1D-FE14-4403-A9DC-E5C1BB787E9E/projectName.app/projectName
(lldb)

我對更改鏈接選項持謹慎態度,因為當我首先遇到這個問題時,它也影響了Xcode本身的構建,然后由於一些難以理解的錯誤而一次又一次地失敗。 此外,我沒有使用任何Twitter特定的代碼,它似乎只是一個集成庫的一部分。

任何幫助都非常感謝,因為我非常希望能夠再次在模擬器上構建!

編輯1

建立階段

構建設置

編輯2

dyld`_dyld_start:
    0x7fff6431d000 <+0>:   popq   %rdi
    0x7fff6431d001 <+1>:   pushq  $0x0
    0x7fff6431d003 <+3>:   movq   %rsp, %rbp
    0x7fff6431d006 <+6>:   andq   $-0x10, %rsp
    0x7fff6431d00a <+10>:  subq   $0x10, %rsp
    0x7fff6431d00e <+14>:  movl   0x8(%rbp), %esi
    0x7fff6431d011 <+17>:  leaq   0x10(%rbp), %rdx
    0x7fff6431d015 <+21>:  movq   0x37aec(%rip), %r8        ;     _dyld_start_static
    0x7fff6431d01c <+28>:  leaq   -0x23(%rip), %rcx         ; <+0>
    0x7fff6431d023 <+35>:  subq   %r8, %rcx
    0x7fff6431d026 <+38>:  leaq   -0x102d(%rip), %r8
    0x7fff6431d02d <+45>:  leaq   -0x8(%rbp), %r9
    0x7fff6431d031 <+49>:  callq  0x7fff6431d076            ;     dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*)
->  0x7fff6431d036 <+54>:  movq   -0x8(%rbp), %rdi
    0x7fff6431d03a <+58>:  cmpq   $0x0, %rdi
    0x7fff6431d03e <+62>:  jne    0x7fff6431d050            ; <+80>
    0x7fff6431d040 <+64>:  movq   %rbp, %rsp
    0x7fff6431d043 <+67>:  addq   $0x8, %rsp
    0x7fff6431d047 <+71>:  movq   $0x0, %rbp
    0x7fff6431d04e <+78>:  jmpq   *%rax
    0x7fff6431d050 <+80>:  addq   $0x10, %rsp
    0x7fff6431d054 <+84>:  pushq  %rdi
    0x7fff6431d055 <+85>:  movq   0x8(%rbp), %rdi
    0x7fff6431d059 <+89>:  leaq   0x10(%rbp), %rsi
    0x7fff6431d05d <+93>:  leaq   0x8(%rsi,%rdi,8), %rdx
    0x7fff6431d062 <+98>:  movq   %rdx, %rcx
    0x7fff6431d065 <+101>: movq   (%rcx), %r8
    0x7fff6431d068 <+104>: addq   $0x8, %rcx
    0x7fff6431d06c <+108>: testq  %r8, %r8
    0x7fff6431d06f <+111>: jne    0x7fff6431d065            ; <+101>
    0x7fff6431d071 <+113>: jmpq   *%rax
    0x7fff6431d073 <+115>: nop

不幸的是,iOS模擬器並不完全支持Twitter帳戶。 你的手機呢。 您遇到的崩潰是缺少_ACAccountTypeIdentifierTwitter 如果要確保在模擬器上沒有發生,無論您在哪里檢查ACAccountType ,請檢查以確保ACAccountTypeIdentifierTwitter可用。 Facebook,新浪微博和騰訊微博也是如此。

OBJ-C

您需要導入TwitterAccounts框架。

在此輸入圖像描述

迅速

下面的整個項目在iOS模擬器上編譯,構建,鏈接和運行。 如果您按照這些說明操作,則可以立即驗證開發環境的完整性。

項目

Xcode> New> Project ...>單視圖應用程序SO-TwitterSwift,Universal,Next,Create。


import UIKit
import Twitter
import Accounts

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let accountStore = ACAccountStore()
        let accountType = accountStore.accountTypeWithAccountTypeIdentifier(
            ACAccountTypeIdentifierTwitter)

        accountStore.requestAccessToAccountsWithType(accountType, options: nil) {(
            granted:Bool, error:NSError!) -> Void in
                println("granted:\(granted) error:\(error)"
        )}
    }
}

為方便起見,上面的代碼發布在Github上。


鏈接,構建,在iOS模擬器上運行

(早在模擬器8.3上驗證為Xcode 6.3.2)

在此輸入圖像描述

grant:true error:nil

一旦確定它點擊,您可能需要iOS模擬器>重置內容和設置...>重置

不要使用-undefined dynamic_lookup。 這導致您在運行時遇到失敗,而不是在鏈接時獲得更明顯和有用的錯誤。 如果從LDFLAGS中刪除它,您可能會看到一條錯誤消息,指出無法解析_ACAccountTypeIdentifierTwitter符號及其使用位置。

_ACAccountTypeIdentifierTwitter由Accounts.framework提供:

$ nm $(xcrun --sdk iphonesimulator --show-sdk-path)/System/Library/Frameworks/Accounts.framework/Accounts | grep _ACAccountTypeIdentifierTwitter
000000000003bdd0 S _ACAccountTypeIdentifierTwitter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM