Pod handling in cocoa touch framework - Got error on Device
Asked Answered
T

1

15

I've googled about 2-3 hours and tried out several things but I'm not able to get this working:

What I like to achieve

The goal is to split UI code and business logic. The business logic should be capusled in a seperate framework. A Cocooa Touch Framework. So the business logic can be reused in a WatchKit App for example.

How I tried to do that

  1. Create a new Xcode Project -> Choose Single View Application.
  2. Add a new Target -> Choose Cocoa Touch Framework.
  3. Run pod init.
  4. Add some pods in the Podfile for each target.
  5. Run pod install.
  6. Implement some code in the UI and Framework

This runs perfectly on the simulator. As soon I will run it on the device the following error appears in the debugger:

dyld: Library not loaded: @rpath/SwiftAddressBook.framework/SwiftAddressBook Referenced from: /private/var/mobile/Containers/Bundle/Application/48E58889-78D4-4D71-B8DA-154ADEB98894/Pod Error Framework.app/Frameworks/PodErrorKit.framework/PodErrorKit Reason: image not found

I do not know how to solve that. Any suggestions?

I'm using:

  • cocoapods 0.38.2
  • Xcode 6.4 (6E35b)
  • Deployment Target iOS 8

I've uploaded the Project (just a fake project, but the same error) to github. You can view it here.

Twinkling answered 17/8, 2015 at 12:4 Comment(4)
Note: This is not necessarily Swift specific. The same problem occurs with CocoaPods and Cocoa Touch Frameworks written in Objective-C.Cravat
Could you post the PodErrorKit Podspec ?Marcille
The pod you have added may not be supporting swift 2.0.Bloc
@Arvind It was Xcode 6.4, nothing to do with Swift 2.0Kink
D
3

The fix is here https://github.com/keithyipkw/pod-cocoa-touch-framework

SwiftAddressBook.framework is dynamic so you need to embedded it into you app just like PodErrorKit. The details is in my commit. The simulators cheat by somehow being able to find the frameworks outside the app (next to it in the derived data).

I could not compile your project because of missing Pods.framework. I could not find the target so I removed it.

Demagogue answered 16/9, 2015 at 9:12 Comment(2)
Verified @keithyip: (1) Open .xcworkspace. (2) Build Phases (3) + Link Binary With Libraries: SwiftAddressBook, Required (4) + Embed Frameworks: SwiftAddressBookArbitrator
The framework was not embedded into your app. You did right for PodErrorKit but missed SwiftAddressBook.Demagogue

© 2022 - 2024 — McMap. All rights reserved.