swift 由于导入包含 .swift 文件的 Objective-C 静态库,Objective-C 应用程序出现构建错误
swift build errors from Objective-C app due to import of Objective-C static library that contains a .swift file
我正在将 ObjC 静态库导入我的 ObjC 应用程序,但出现 95 个 swift 相关的构建错误。
ObjC 静态库构建正常并包含 .m .h 和 .swift 源文件。
Swift 文件导入 CoreBluetooth。
以下内容...
- 构建错误
- 源码正文
- 项目的 zip,以响应 Asperi 的善意请求
更新 2
更新 3
..1。这里 Xcode 构建错误加上必要的源代码......
..2。源代码文本
// OBJC APP
// ViewController.h
// sim_backend_UI
//
//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "Mobile_Sensor_API.h"
@interface ViewController : UIViewController
@end
// OBJC APP
// ViewController.m
// sim_backend_UI
//
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Mobile_Sensor_API* mobile_sensor_API;
if( !mobile_sensor_API ) mobile_sensor_API = [[ Mobile_Sensor_API alloc] init];
// Tell Mobile_Sensor_API library to start BLE central scanning:
[ mobile_sensor_API _init_and_test ];
}
@end
// OBJC STATIC LIB with some Swift
// mobile_sensor_API.h
#import <Foundation/Foundation.h>
@interface Mobile_Sensor_API : NSObject
-(int)_init_and_test;
@end
// OBJC STATIC LIB with some Swift
// mobile_sensor_API.m
//
//
// ObjC...
#import <UIKit/UIKit.h>
#import <CoreBluetooth/CoreBluetooth.h>
// app...
#import "mobile_sensor_API.h"
#import "mobile_sensor_API-Swift.h"
//#define BUILD_SIM_MOBILE_HUB ' builds sim mobile_hub
@interface Mobile_Sensor_API()
@property BLE_Central* BLE_central_instance;
@end
@implementation Mobile_Sensor_API
// Init Maestro lib at boot time and test interface with backend:
-(int)_init_and_test
{
// Init access to Swift:
_BLE_central_instance = [[ BLE_Central alloc] init];
// Start BLE:
[ _BLE_central_instance start_central ];
return 1;
}
@end
/*
// OBJC STATIC LIB with some Swift
Abstract:
A class to discover, connect, receive notifications and write data to sensor peripherals by using a
transfer service and characteristic.
*/
//import Foundation
import UIKit
import CoreBluetooth
import os
var centralManager: CBCentralManager = CBCentralManager()
@objc open class BLE_Central
: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
{
var discoveredPeripheral: CBPeripheral?
var transferCharacteristic: CBCharacteristic?
var writeIterationsComplete = 0
var connectionIterationsComplete = 0
let defaultIterations = 5 // change this value based on test usecase
var data = Data()
@objc public func start_central()
{
os_log("Central_class: start_central")
mobile_sensor_API.centralManager = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionShowPowerAlertKey: true])
os_log("Scanning started")
}
. . .
更新 1 -- 2020 年 12 月 5 日...
我从 mac OS.
压缩了两个项目 sim_backend_UI & mobile_sensor_API
您需要使用您的...设置项目
目标 > 签约 > 团队
和
TARGETS > 构建设置 > 所有 > 打包 > 产品包标识符
..因为我从他们那里删除了我们公司
更新 2 -- 十二月。 6 已删除
更新 3 -- 十二月。 7 人回答了 1
Asperi 回答 1 的步骤...
1. Created workspace at top folder
1.1 Copied clean app and lib to top folder
2. Add mobile_sensor_API.xcodeproj to workspace
3. Add sim_backend_UI.xcodeproj to workspace
4. Added dependency of sim_backend_UI to lib via workspace
a. sim_backend_UI proj > General tab > Frameworks, Libs.. > +
b. Select libmobile_sensor_API.a
c. Add.
5. Add Some.swift (any swift file you want) to sim_backend_UI, just for the purpose Xcode add required system swift dynamic libraries (which will be needed for swift part in static library as well)... and confirm creating bridge in appeared dialog
a. new file > Swift > Some.swift
b. Create Bridging Header
c. Added to Some.swift ...
import Foundation
struct Some{}
d.将 mobile_sensor_API.h 拖入应用程序导航栏
e.将 Xcode“活动方案”设置为应用程序项目和设备
6. Build
I got "succeeded" and it runs on iphone.
最简单的解决方案是允许 Xcode 创建所有依赖项并包含所有必需的系统库。
这是我所做的:
在顶级文件夹级别创建工作区
已将 mobile_sensor_API.xcodeproj 添加到工作区
已将 sim_backend_UI.xcodeproj 添加到工作区
通过工作空间
添加了 sim_backend_UI 到 lib 的依赖项
- 将
Some.swift
(任何你想要的swift文件)添加到sim_backend_UI,只是为了Xcode添加所需的系统swift动态库(其中静态库中的 swift 部分也需要)...并确认在出现的对话框中创建桥接
- 构建 >>> 成功!
更新 3 ...............................................我通过第 6 步完成此回答后,我“成功”了,但是 sim_backend_UI.app 是红色的,不会 运行 在 iphone.
我正在将 ObjC 静态库导入我的 ObjC 应用程序,但出现 95 个 swift 相关的构建错误。
ObjC 静态库构建正常并包含 .m .h 和 .swift 源文件。
Swift 文件导入 CoreBluetooth。
以下内容...
- 构建错误
- 源码正文
- 项目的 zip,以响应 Asperi 的善意请求
更新 2
更新 3
..1。这里 Xcode 构建错误加上必要的源代码......
..2。源代码文本
// OBJC APP
// ViewController.h
// sim_backend_UI
//
//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "Mobile_Sensor_API.h"
@interface ViewController : UIViewController
@end
// OBJC APP
// ViewController.m
// sim_backend_UI
//
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Mobile_Sensor_API* mobile_sensor_API;
if( !mobile_sensor_API ) mobile_sensor_API = [[ Mobile_Sensor_API alloc] init];
// Tell Mobile_Sensor_API library to start BLE central scanning:
[ mobile_sensor_API _init_and_test ];
}
@end
// OBJC STATIC LIB with some Swift
// mobile_sensor_API.h
#import <Foundation/Foundation.h>
@interface Mobile_Sensor_API : NSObject
-(int)_init_and_test;
@end
// OBJC STATIC LIB with some Swift
// mobile_sensor_API.m
//
//
// ObjC...
#import <UIKit/UIKit.h>
#import <CoreBluetooth/CoreBluetooth.h>
// app...
#import "mobile_sensor_API.h"
#import "mobile_sensor_API-Swift.h"
//#define BUILD_SIM_MOBILE_HUB ' builds sim mobile_hub
@interface Mobile_Sensor_API()
@property BLE_Central* BLE_central_instance;
@end
@implementation Mobile_Sensor_API
// Init Maestro lib at boot time and test interface with backend:
-(int)_init_and_test
{
// Init access to Swift:
_BLE_central_instance = [[ BLE_Central alloc] init];
// Start BLE:
[ _BLE_central_instance start_central ];
return 1;
}
@end
/*
// OBJC STATIC LIB with some Swift
Abstract:
A class to discover, connect, receive notifications and write data to sensor peripherals by using a
transfer service and characteristic.
*/
//import Foundation
import UIKit
import CoreBluetooth
import os
var centralManager: CBCentralManager = CBCentralManager()
@objc open class BLE_Central
: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
{
var discoveredPeripheral: CBPeripheral?
var transferCharacteristic: CBCharacteristic?
var writeIterationsComplete = 0
var connectionIterationsComplete = 0
let defaultIterations = 5 // change this value based on test usecase
var data = Data()
@objc public func start_central()
{
os_log("Central_class: start_central")
mobile_sensor_API.centralManager = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionShowPowerAlertKey: true])
os_log("Scanning started")
}
. . .
更新 1 -- 2020 年 12 月 5 日...
我从 mac OS.
压缩了两个项目 sim_backend_UI & mobile_sensor_API您需要使用您的...设置项目 目标 > 签约 > 团队 和 TARGETS > 构建设置 > 所有 > 打包 > 产品包标识符
..因为我从他们那里删除了我们公司
更新 2 -- 十二月。 6 已删除
更新 3 -- 十二月。 7 人回答了 1
Asperi 回答 1 的步骤...
1. Created workspace at top folder
1.1 Copied clean app and lib to top folder
2. Add mobile_sensor_API.xcodeproj to workspace
3. Add sim_backend_UI.xcodeproj to workspace
4. Added dependency of sim_backend_UI to lib via workspace
a. sim_backend_UI proj > General tab > Frameworks, Libs.. > +
b. Select libmobile_sensor_API.a
c. Add.
5. Add Some.swift (any swift file you want) to sim_backend_UI, just for the purpose Xcode add required system swift dynamic libraries (which will be needed for swift part in static library as well)... and confirm creating bridge in appeared dialog
a. new file > Swift > Some.swift
b. Create Bridging Header
c. Added to Some.swift ...
import Foundation
struct Some{}
d.将 mobile_sensor_API.h 拖入应用程序导航栏 e.将 Xcode“活动方案”设置为应用程序项目和设备
6. Build
I got "succeeded" and it runs on iphone.
最简单的解决方案是允许 Xcode 创建所有依赖项并包含所有必需的系统库。
这是我所做的:
在顶级文件夹级别创建工作区
已将 mobile_sensor_API.xcodeproj 添加到工作区
已将 sim_backend_UI.xcodeproj 添加到工作区
通过工作空间
添加了 sim_backend_UI 到 lib 的依赖项
- 将
Some.swift
(任何你想要的swift文件)添加到sim_backend_UI,只是为了Xcode添加所需的系统swift动态库(其中静态库中的 swift 部分也需要)...并确认在出现的对话框中创建桥接
- 构建 >>> 成功!
更新 3 ...............................................我通过第 6 步完成此回答后,我“成功”了,但是 sim_backend_UI.app 是红色的,不会 运行 在 iphone.