question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Can't build JitsiMeet with XCode 12.0 beta 3

See original GitHub issue

Description:

After installing XCode 12.0 (beta 3) and trying to compile a project that includes the cocoapod JitsiMeet SDK, I can not build.

Steps to reproduce:

  1. Install XCode 12.0 beta 3 from iTunes Developer Center.
  2. Open a project with a dependency of JitsiMeet SDK as a cocoapod and ‘import JitsiMeet’
  3. Build in iOS Simulator 14.0 & iOS Simulator 12.4

Expected behavior:

Build OK.

Actual behavior:

Following errors appear in XCode:

'PiPViewCoordinator' is not a member type of 'JitsiMeet'
'PiPViewCoordinatorDelegate' is not a member type of 'JitsiMeet'
'AnimationCompletion' is not a member type of 'JitsiMeet'
'JMCallKitListener' is not a member type of 'JitsiMeet'

In file: x86_64-apple-ios-simulator.swiftinterface

Client information:

  • Jitsi Meet version: 2.9.3
  • Operating System: macOS Catalina 10.15.5

Issue Analytics

  • State:closed
  • Created 3 years ago
  • Comments:17 (5 by maintainers)

github_iconTop GitHub Comments

3reactions
naeemAkeecommented, Dec 9, 2020

Hello @saghul hope you are fine. I also have same problem. I’m using Xcode 12.2 and JitsiSDK 2.10.2

But I faced same error.

Screenshot 2020-12-09 at 11 11 02 PM
1reaction
SBiOSoftWharecommented, Sep 30, 2020

This error is due to an Apple bug, you can find more information in this discussion on the Apple Developer Forum. Normally with Module Stability, currently used for the iOS Jitsi binary framework, we should be able to use a binary framework built with Xcode 11 and Swift 5.1 with Xcode 12 and Swift 5.3 without any issue, this is the goal of the feature.

Regarding the Apple issue the current solution (explained in the Apple forum) is to remove JitsiMeet module prefix in all .swiftinterface files located here.

For example I’ve been able to build the JitsiMeetSDK 2.8.1 (built with Swift 5.2.2) with Xcode 12 (using Swift 5.3) by removing the module prefix JitsiMeet everywhere in the .swiftinterface files.

Below you can find a concrete example of the content of x86_64-apple-ios-simulator.swiftinterface file of JitsiMeetSDK 2.8.1 I manually modified:

// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 5.2.2 (swiftlang-1103.0.32.6 clang-1103.0.32.51)
// swift-module-flags: -target x86_64-apple-ios11.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -module-name JitsiMeet
import AVKit
import CallKit
import Foundation
@_exported import JitsiMeet
import Swift
public typealias AnimationCompletion = (Swift.Bool) -> Swift.Void
public protocol PiPViewCoordinatorDelegate : AnyObject {
  func exitPictureInPicture()
}
public class PiPViewCoordinator {
  public var dragBoundInsets: UIKit.UIEdgeInsets {
    get
    set
  }
  public enum Position {
    case lowerRightCorner
    case upperRightCorner
    case lowerLeftCorner
    case upperLeftCorner
    public static func == (a: PiPViewCoordinator.Position, b: PiPViewCoordinator.Position) -> Swift.Bool
    public var hashValue: Swift.Int {
      get
    }
    public func hash(into hasher: inout Swift.Hasher)
  }
  public var initialPositionInSuperview: PiPViewCoordinator.Position
  public var pipSizeRatio: CoreGraphics.CGFloat
  weak public var delegate: PiPViewCoordinatorDelegate?
  public init(withView view: UIKit.UIView)
  public func configureAsStickyView(withParentView parentView: UIKit.UIView? = nil)
  public func show(completion: AnimationCompletion? = nil)
  public func hide(completion: AnimationCompletion? = nil)
  public func enterPictureInPicture()
  @objc public func exitPictureInPicture()
  public func resetBounds(bounds: CoreGraphics.CGRect)
  public func stopDragGesture()
  open func configureExitPiPButton(target: Any, action: ObjectiveC.Selector) -> UIKit.UIButton
  @objc deinit
}
@_inheritsConvenienceInitializers @_hasMissingDesignatedInitializers @objc final public class JMCallKitProxy : ObjectiveC.NSObject {
  @objc public static var enabled: Swift.Bool {
    @objc get
    @objc set
  }
  @objc public static func configureProvider(localizedName: Swift.String, ringtoneSound: Swift.String?, iconTemplateImageData: Foundation.Data?)
  @objc public static func isProviderConfigured() -> Swift.Bool
  @objc public static func addListener(_ listener: JMCallKitListener)
  @objc public static func removeListener(_ listener: JMCallKitListener)
  @objc public static func hasActiveCallForUUID(_ callUUID: Swift.String) -> Swift.Bool
  @objc public static func reportNewIncomingCall(UUID: Foundation.UUID, handle: Swift.String?, displayName: Swift.String?, hasVideo: Swift.Bool, completion: @escaping (Swift.Error?) -> Swift.Void)
  @objc public static func reportCallUpdate(with UUID: Foundation.UUID, handle: Swift.String?, displayName: Swift.String?, hasVideo: Swift.Bool)
  @objc public static func reportCall(with UUID: Foundation.UUID, endedAt dateEnded: Foundation.Date?, reason endedReason: CallKit.CXCallEndedReason)
  @objc public static func reportOutgoingCall(with UUID: Foundation.UUID, startedConnectingAt dateStartedConnecting: Foundation.Date?)
  @objc public static func reportOutgoingCall(with UUID: Foundation.UUID, connectedAt dateConnected: Foundation.Date?)
  @objc public static func request(_ transaction: CallKit.CXTransaction, completion: @escaping (Swift.Error?) -> Swift.Void)
  @objc deinit
}
@objc public protocol JMCallKitListener : ObjectiveC.NSObjectProtocol {
  @objc optional func providerDidReset()
  @objc optional func performAnswerCall(UUID: Foundation.UUID)
  @objc optional func performEndCall(UUID: Foundation.UUID)
  @objc optional func performSetMutedCall(UUID: Foundation.UUID, isMuted: Swift.Bool)
  @objc optional func performStartCall(UUID: Foundation.UUID, isVideo: Swift.Bool)
  @objc optional func providerDidActivateAudioSession(session: AVFoundation.AVAudioSession)
  @objc optional func providerDidDeactivateAudioSession(session: AVFoundation.AVAudioSession)
  @objc optional func providerTimedOutPerformingAction(action: CallKit.CXAction)
}
extension PiPViewCoordinator.Position : Swift.Equatable {}
extension PiPViewCoordinator.Position : Swift.Hashable {}

A post process with a script after the framework generation can be a solution while waiting for Apple to fix the issue. I don’t know if there is another way to solve that. Otherwise I can open a dedicated issue for this annoying bug if you prefer.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Failed to build module, Apple Swift version 5.1.3 have features ...
What I already done: Reinstall XCode;. Changed Swift Language Version;. Deleted VALID_ARCHS reference according Xcode 12 Beta 2 - unable to load ...
Read more >
Create Jitsi Meet Framework for native iOS application and ...
Configure jitsi-meet react native application on your system run it and make it work; Open Xcode project run it on iOS device check...
Read more >
iOS SDK | Jitsi Meet - GitHub Pages
JitsiMeet is an iOS framework which embodies the whole Jitsi Meet experience and makes it reusable by third-party apps. To get started: Add...
Read more >
Configure PLCrashReporter framework for device on xcode ...
[Solved]-Configure PLCrashReporter framework for device on xcode 4.3 beta ... The Xcode project being part of PLCrashReporter does that all for you.
Read more >
Xcode encountered an error - Seba Online
5 iOS : XCode 6 Beta 4 error - "An error was encountered while running (Domain ... 3 installed in your applications folder,...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found