2014-04-11 59 views
2

我通過CocoaPods添加Facebook Tweaks到我的項目,現在我想通過TestFlight與一些測試者共享應用程序。默認情況下,調整菜譜方案在發佈版本停用(被歸檔時分配使用),所以我做了以下內容:Facebook的調整與CocoaPods鏈接器錯誤歸檔時

  1. 通過複製我的原方案
  2. 加入了創建新方案「MyApp的TestFlight」在被稱爲「TestFlight」的項目信息屏幕中創建配置(除了預先配置的「調試」和「發佈」)。當被問及哪些配置需要繼承設置時,我使用了「發佈」配置
  3. 在「 MyApp Testflight「方案我將用於」歸檔「的構建配置設置爲」TestFlight「。
  4. I n預處理器宏我爲Facebook Tweaks庫使用的宏FB_TWEAK_ENABLED定義了不同的值,以啓用和禁用它的用法。因爲我肯定不希望在Release配置中啓用Tweaks(例如對於App Store),但我希望能夠通過TestFlight啓用Tweaks來分發應用程序,所以我在Debug和TestFlight配置中激活了Tweaks,但不是發佈配置。 enter image description here

  5. 我通過在調試配置中在0和1之間切換FB_TWEAK_ENABLED來驗證激活和停用調整的效果。

到目前爲止一切正常,我可以使用我的預處理器常量激活停用調整。我還驗證了,使用不同的方案運行將按預期更改預處理器常量。

因此,我可以成功地運行應用程序啓用和不啓用調整。但是,當我嘗試將其存檔時,出現鏈接錯誤:

Undefined symbols for architecture armv7: 
"__FBTweakIdentifier", referenced from: 
    ___30-[SUPConfirmPaymentView setup]_block_invoke_2 in SUPConfirmPaymentView.o 
    ___30-[SUPConfirmPaymentView setup]_block_invoke_254 in SUPConfirmPaymentView.o 
    ___30-[SUPConfirmPaymentView setup]_block_invoke_277 in SUPConfirmPaymentView.o 
    ___30-[SUPConfirmPaymentView setup]_block_invoke_2102 in SUPConfirmPaymentView.o 
    ___30-[SUPConfirmPaymentView setup]_block_invoke_2125 in SUPConfirmPaymentView.o 
    ___30-[SUPConfirmPaymentView setup]_block_invoke_2150 in SUPConfirmPaymentView.o 
    ___30-[SUPConfirmPaymentView setup]_block_invoke_2171 in SUPConfirmPaymentView.o 
    ... 

LD:符號(S)未找到的ARMv7架構鐺 :錯誤:連接命令,退出代碼爲1(使用-v失敗請參閱調用)

還有更多類似armv7s和arm64的錯誤。 但是我的項目,以及目標,以及Pods項目和Pods項目本身的庫都已設置爲「arm64 armv7 armv7s」ArchitcturesValid Architectures

爲了記錄:我SUPConfirmPaymentView setup方法做了很多這樣的電話:

// setup animation constants 
FBTweakBind(self, beatEnlargementFactor, @"Confirm Payment View", @"Beat Animation", @"scale factor", 1.1, 1.0, 3.0); 

但我不認爲這是問題,因爲它工作在調試版本,我想這只是首位鏈接器注意到某事是錯誤的。

那麼,是什麼工作:

使用DEBUG配置在模擬器或設備
  • 運行的使用調試配置FAS在模擬器或設備FB_TWEAK_ENABLED=1
  • 運行它使用RELASE配置其FAS FB_TWEAK_ENABLED=0 FAS FB_TWEAK_ENABLED=0
  • 存檔
  • 在使用TestFlight配置的模擬器或設備上運行FB_TWEAK_ENABLED=0
  • 其中有存檔使用TestFlight配置FB_TWEAK_ENABLED=0

什麼不使用具有FB_TWEAK_ENABLED=1具有FB_TWEAK_ENABLED=1

  • 存檔使用TestFlight配置TestFlight配置工作

    • 運行於模擬器或設備

      我不明白爲什麼它不工作,因爲它應該是相同的作爲發佈配置(我從它複製),並且確實有效,除了這個常量。而使用這個常量的調試版本可以工作。

      任何想法發生了什麼問題?

      編輯: 感謝@alloy用於指向這個問題上的CocoaPods:https://github.com/CocoaPods/CocoaPods/issues/1934#issuecomment-40132425 這似乎是相關的。

      所以我用從問題的討論下面的代碼:

      #if defined(DEBUG) && DEBUG 
      #warning DEBUG=1 
      #else 
      #warning DEBUG=0 
      #endif 
      

      並將其複製到SUPConfirmPaymentView.m。

      結果是這樣的:

      build results with warnings when using code above

      僅通過粘貼代碼,我已經得到了調試= 1一擰,這是由於Xcode的連續編譯(這顯然使用了DEBUG標誌)。 但是,當使用存檔時,我得到了上面的結果,據我所知,那些在目標下面的警告都來自這一個存檔生成權?這意味着預處理器(?)將兩次傳遞.m文件,一次使用DEBUG = 1,一次使用Debug = 0,這將解釋問題。 但是這引起了其他兩個問題:

      1. 爲什麼它通過.m文件兩次,它應該只是來通過一次,因爲它是一個的.m文件(我知道爲什麼出現這種情況的.h文件)
      2. 爲什麼DEBUG = 1?這是從哪裏來的?

      EDIT2: 我重新創建我的「TestFlight」的目標是調試目標的副本,所推薦的@alloy。它仍然沒有構建,這可能是由於CocoaPods沒有使用調試配置。 如何使其使用調試配置? @alloy提到了一些關於:debug的內容,但我不知道如何使用它,並沒有找到任何關於它的文檔。 我現在Podfile看起來像這樣(的項目除外):

      platform :ios, '7.0' 
      pod 'AFNetworking', '~> 2.0' 
      pod 'Tweaks' 
      

      我將如何使用:debug語法,以使用它爲我的「TestFlight」配置時的CocoaPods建庫調整菜譜方案的調試配置?

  • 回答

    1

    認爲你遇到了這個問題:https://github.com/CocoaPods/CocoaPods/issues/1934#issuecomment-40132425

    (我不會越過粘貼很長的回答,而其背景的,它如果在機票上跟蹤器讀取問題的更好。)

    +1

    不知道如果我明白了一切(例如,我的天堂'Beta'=>:debug語法還沒花時間,所以我不明白它的作用),據我所知,你猜測Tweaks lib是用DEBUG = 0(或未定義的)編譯的, ,這導致實際執行被排除在外。但是同時我的項目是用DEBUG = 1編譯的,這導致它尋找實現。聽起來像一個很好的理論,這將解釋這個問題,但正如你從上面的截圖中可以看到的,我沒有設置DEBUG標誌,所以它應該仍然是未定義的。它在這種情況下不應該起作用嗎? –

    +0

    我將問題討論中的'#warning DEBUG = 1'調試代碼複製到了我的.m文件之一中,以查看實際發生的情況。我只是不知道從結果中得出什麼。如果你可以看一看(相應地編輯問題)會很好。 –

    +0

    如果你確實想在你的存檔版本中啓用調整,那麼你應該使用基於'debug'配置的配置來做到這一點,並且你應該告訴CocoaPods將該名稱的配置基於':debug' 。然後你將在兩個配置中都有'DEBUG = 1',並且應該包含缺失的符號。 – alloy