0

SalesForce SDK を含む Core.proj という iOS プロジェクトがあり、Objective-C で記述されています。このプロジェクトは SF SDK を利用し、バイナリを SF ライブラリにリンクします。私のSFの実装を管理するのに役立つ多くのことを行います。それは私の他のすべての Obj-C プロジェクトに含まれており、それらの中でまったく問題なく動作します。

このプロジェクトを Swift (2.1) で使用するのはこれが初めてです。Xcode 7.1.1 で iOS 9 を使用しています。Core.xcodeproj を Swift プロジェクトに追加しました。次に、ObjC ファイルを作成しました。Xcode は、ブリッジ ヘッダーを作成するかどうかを尋ねます。そうです。Swift-Bridging-Header.h というブリッジ ヘッダーを作成しました。これにより、ブリッジング ヘッダーを介して Core.xcodeproj 内のファイルにアクセスできるようになります。たとえば、ブリッジング ヘッダーから独自のバージョンの Salesforce Authentication Manager にアクセスできます。

アプリのデリゲートで、OAuth を開始したいと思います (ここでは最小限に抑えています)。

    let sharedManager = MyAuthenticationManager.sharedManager()

    let successBlock: OAuthFlowSuccessCallbackBlock = { sfAuthInfo in }

    let failureBlock: OAuthFlowFailureCallbackBlock = { sfAuthInfo in }

    sharedManager.loginWithCompletion(successBlock, failure: failureBlock)

完全な開示: ここに表示される各ブロックは、SFOAuthInfo オブジェクトを引数として受け取ります。Swift にこのブロックを読み取らせるために、コピー ファイルに SFOAuthInfo.h を追加する必要がありました。

これですべて正常にコンパイルされますが、タップしてログインして上記のコードを実行すると、次のエラーが発生します。

    2015-12-04 11:53:54.879 MyApp[19108:3494140] -[UIDevice    macaddress]: unrecognized selector sent to instance 0x7fcfb4903230
2015-12-04 11:53:54.890 MyApp[19108:3494140] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIDevice macaddress]: unrecognized selector sent to instance 0x7fcfb4903230'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010d6adf65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010f624deb objc_exception_throw + 48
    2   CoreFoundation                      0x000000010d6b658d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x000000010d603f7a ___forwarding___ + 970
    4   CoreFoundation                      0x000000010d603b28 _CF_forwarding_prep_0 + 120
    5   MyApp                  0x000000010c869317 -[SFOAuthCredentials keyMacForService:] + 84
    6   MyApp                  0x000000010c8696b8 -[SFOAuthCredentials updateTokenEncryption] + 210
    7   MyApp                  0x000000010c8673ee -[SFOAuthCredentials initWithIdentifier:clientId:encrypted:] + 211
    8   MyApp                  0x000000010c84102c -[SFUserAccount initWithIdentifier:] + 197
    9   MyApp                  0x000000010c85f32d -[SFUserAccountManager createUserAccount] + 91
    10  MyApp                  0x000000010c831b41 -[SFAuthenticationManager loginWithCompletion:failure:account:] + 284
    11  MyApp                  0x000000010c831a0b -[SFAuthenticationManager loginWithCompletion:failure:] + 53
    12  MyApp                  0x000000010c60440c -[MyAuthenticationManager loginWithCompletion:failure:] + 124
    13  MyApp                  0x000000010c5dc58f _TFC18MyApp11AppDelegate5loginfS0_FT_T_ + 911
    14  MyApp                  0x000000010c5dfdc4 _TFC18MyApp25LandingPageViewController17loginButtonTappedfS0_FPSs9AnyObject_T_ + 68
    15  MyApp                  0x000000010c5dfe16 _TToFC18MyApp25LandingPageViewController17loginButtonTappedfS0_FPSs9AnyObject_T_ + 54
    16  UIKit                               0x000000010e1af1fa -[UIApplication sendAction:to:from:forEvent:] + 92
    17  UIKit                               0x000000010e313504 -[UIControl sendAction:to:forEvent:] + 67
    18  UIKit                               0x000000010e3137d0 -[UIControl _sendActionsForEvents:withEvent:] + 311
    19  UIKit                               0x000000010e312906 -[UIControl touchesEnded:withEvent:] + 601
    20  UIKit                               0x000000010e219aa3 -[UIWindow _sendTouchesForEvent:] + 835
    21  UIKit                               0x000000010e21a691 -[UIWindow sendEvent:] + 865
    22  UIKit                               0x000000010e1cc752 -[UIApplication sendEvent:] + 263
    23  UIKit                               0x000000010e1a7fcc _UIApplicationHandleEventQueue + 6693
    24  CoreFoundation                      0x000000010d5da0a1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    25  CoreFoundation                      0x000000010d5cffcc __CFRunLoopDoSources0 + 556
    26  CoreFoundation                      0x000000010d5cf483 __CFRunLoopRun + 867
    27  CoreFoundation                      0x000000010d5cee98 CFRunLoopRunSpecific + 488
    28  GraphicsServices                    0x0000000113e46ad2 GSEventRunModal + 161
    29  UIKit                               0x000000010e1ad676 UIApplicationMain + 171
    30  MyApp                  0x000000010c5ddd8d main + 109
    31  libdyld.dylib                       0x00000001107a592d start + 1
    32  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

SF SDK には、UIDevice+SFHardware.h というカテゴリがあります。このカテゴリには、「macaddress」と呼ばれるメソッドがあります。明らかに、このカテゴリを正しく読み取っていません。しかし、なぜ?スタック トレースからわかるように、SF SDK の他のファイルを正しく読み取っています。

これを機能させるために、いくつかのことを試しました。例: iOS - UUID 生成で奇妙な例外がスローされますが、UIDevice+SFHardware.h が使用されます。私はこれを試しました: https://developer.salesforce.com/forums/?id=906F00000009CBvIAM。作業を確認するために、プロジェクトを完全に再構築しました。

この UIDevice+SFHardware.h は、ObjC プロジェクト内にある SF SDK からのみアクセスされるため、このファイルをブリッジに追加する必要はありません。

私は何か間違ったことをしたに違いない。どんな助けでも大歓迎です。

4

2 に答える 2

0

私はちょうどこの問題を経験しました。

プロジェクト > ビルド設定 > その他のリンカー フラグで、次を追加します: -ObjC -all_load

私の SalesforceSDK は私の Pod プロジェクトにあります。同じことをしている場合は、SalesforceMobileSDK-iOS プロジェクトでこれらのフラグを設定します。そうでない場合は、Salesforce SDK がコンパイルされている場所。

于 2015-12-05T22:08:04.480 に答える