Подтвердить что ты не робот

Почему я получаю ошибку компилятора Uneclared типа "PubNub" с Swift Cocoa App и заголовок?

Я запускаю новый проект Cocoa Swift, который включает в себя PubNub SDK через CocoaPods со следующим подфайлом:

target 'myProject' do
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
pod 'PubNub', '~>4.0'
pod 'Alamofire', '~> 1.3'
end
target 'myProjectTests' do
end

В моем автогенерации заголовок моста у меня есть импорт для PubNub как:

#import <PubNub/PubNub.h>

И мой файл AppDelegate.swift:

import Cocoa

@NSApplicationMain


class AppDelegate: NSObject, NSApplicationDelegate {

var client:PubNub?

   func applicationDidFinishLaunching(aNotification: NSNotification) {
    let config = PNConfiguration( publishKey: "Your_Pub_Key", subscribeKey:     "Your_Sub_Key")

    client = PubNub.clientWithConfiguration(config)

    client?.addListener(self)

    client?.subscribeToChannels(["Your_Channel"], withPresence: false)

    client?.publish("Swift + PubNub!", toChannel: "demo", compressed: false, withCompletion: nil)    }

func client(client: PubNub!, didReceiveMessage message: PNMessageResult!) {
    println(message)
}

func applicationWillTerminate(aNotification: NSNotification) {
    // Insert code here to tear down your application
}


}

Проект не удается построить из-за ошибок компилятора при использовании незаявленного типа PubNub. Я проверил настройки сборки, а раздел Swift Compiler - Code Generation показывает, что он указывает на заголовок заголовочного файла цели (автоматически заполненный).

Использование Xcode 6.4 и pods версии 0.38.2

4b9b3361

Ответ 1

Отсутствует заголовок заголовка при импорте внешних фреймов

Прямо от Документация разработчика Apple:

Вы можете импортировать внешние фреймворки с кодовой базой чистой Objective-C, кодовой базой чистой Swift, или смешанной версией. [...] Вы можете импортировать фреймворк в любой файл Swift другого объекта, используя следующий синтаксис:

import FrameworkName

Fix

Добавить import PubNub framework.

import UIKit
import PubNub

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var client:PubNub?
    // ...
}

С объявлением import, PubNub объявляется автоматически завершает в редакторе Xcode, компилирует, связывает, строит и запускает.


Пошаговое руководство Swift Framework

Поскольку во многих комментариях ниже подразумевается, что Bridging-Headers всегда требуются, неправильно при использовании внешних фреймворков, как это сейчас происходит с директивой use_frameworks! в Podfile, найдите здесь чистый Swift решение. За ним следует проект Xcode, который вы можете скачать и испытать.

Непонятно задокументировано в iOS Developer Library, в концепции Использование Swift с Cocoa и Objective-C, раздел Mix и Match, раздел Swift и Objective-C в том же проекте, пункт Импорт внешних фреймворков:

Процесс импорта внешней фреймворка является тем же самым, что структура написана на одном языке или содержит файлы из обоих языков.

Podfile

platform :ios, '8.0'
use_frameworks!

target 'SO-31642385' do
pod 'PubNub', '~>4.0'
pod 'Alamofire', '~> 1.3'
end

Установить контейнеры

] pod install

Downloading dependencies
Installing Alamofire (1.3.1)
Installing CocoaLumberjack (2.0.0)
Installing PubNub (4.0.4)
Generating Pods project
Integrating client project

Please close any current Xcode sessions and use `SO-31642385.xcworkspace` for this project from now on.

Структура импорта

import UIKit
import PubNub

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var client:PubNub?

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions:
                         [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        self.client = PubNub()
        return true
    }
    // ...
}

► Найдите это решение на GitHub и дополнительные сведения о Быстрые рецепты.