Я бы хотел использовать Swift для создания плагина панели предпочтений OS X для приложения "Системные настройки", но я не могу заставить его работать.
После нажатия "Далее" шаблон Xcode не предлагает выбор Swift как языка, но автоматически создает проект в Objective-C.
Без добавления какого-либо кода или что-либо еще, проект будет успешно выполнен. Если вы щелкните правой кнопкой мыши на Продукте и выберите "Открыть во внешнем редакторе", системные настройки успешно установят и загрузят панель предпочтений.
Он просто работает!
Хорошо, что здорово, но теперь я хочу добавить новый подкласс Cocoa с помощью Swift.
Принятие значения по умолчанию и возможность создания заголовка моста.
Теперь, закройте Системные настройки и без добавления кода, перестройте проект. Как и прежде, щелкните правой кнопкой мыши Продукт и "Открыть во внешнем редакторе".
Системные настройки подтвердят замену панели предпочтений, и она ее установит, но затем она не загружается.
Если вы показываете встроенный продукт в Finder, в дополнение к плагину .prefPane, также есть папка .swiftmodule.
Я предполагаю, что в фазах сборки или настройках сборки что-то не хватает, которые отвечают за включение модуля .swift с остальной частью пакета, но не смогли понять это.
После добавления кода, который использует новый класс, необходимо импортировать заголовок зонтика Swift ( "Prax-Swift.h" ), чтобы скомпилировать проект, но импорт заголовка зонтика не устраняет эту проблему.
// Prax.h
#import <PreferencePanes/PreferencePanes.h>
#import "Prax-Swift.h"
@interface Prax : NSPreferencePane
@property PraxObject *ourPrax;
- (void)mainViewDidLoad;
@end
Я также попытался удалить Prax.h и Prax.m и просто реализовать подкласс NSPreferencePane в Swift. Как и раньше, проект строит и устанавливает, но системные настройки не загружают его.
// Prax.swift
import PreferencePanes
class Prax: NSPreferencePane {
override func mainViewDidLoad() {
}
}
Извините, если я использовал слишком много изображений в этом вопросе; это казалось самым ясным способом объяснить проблему и облегчить ее воспроизведение. Вероятно, это простое решение. Любые идеи?