小编Mar*_*ark的帖子

Xcode 8:函数类型不能让参数标签破坏我的构建

似乎由于某种原因,Swift选择通过强制用户删除完成处理程序参数标签来使编码更难以读取.我已经阅读过Swift的讨论,仍然认为这是一个错误.至少他们可以让它成为可选的.

使用Xcode 8构建时 - 有没有办法强制编译器使用Swift 2.3,所以我不再会遇到这些错误?我已经更新了使用旧版Swift的选项(在构建设置下) xcode中的遗留支持 但我似乎仍然得到这个错误:

函数类型不能有参数标签'isloggedIn'; 请改用"_"

错误Xcode 8

如何在完成处理程序中保留标签?

ios completionhandler swift xcode8

72
推荐指数
5
解决办法
2万
查看次数

自编译预编译头文件以来,文件已被修改

所以我不小心修改了一个标题(CBCentralManager.h)并在我构建时导致上面的错误显示.我搜索了堆栈溢出的解决方案,并发现了这一点.即使在删除派生数据后,我仍然得到相同的错误.我也试过删除ModuleCache/FUW5IOHP9BIS文件夹但没有成功.

这是我看到的具体错误:

file /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/CoreBluetooth.framework/Headers/CBCentralManager.h' has been modified since the precompiled header '/var/folders/pj/hslm53_51xxd_npfqym5r6z00000gn/C/com.apple.DeveloperTools/5.0-5A1412/Xcode/5.0-5A1412/Xcode/ModuleCache/FUW5IOHP9BIS/CoreBluetooth.pcm was built

任何帮助是极大的赞赏.

iphone xcode objective-c ios

36
推荐指数
4
解决办法
2万
查看次数

swift中的数据类型为多变量声明

在objective-c中,我们可以声明变量,如 - NSString *a,*b,*c;

在swift中有一种方法可以声明相同的数据类型多变量变量而不是像下面那样

var a: NSString = ""
var b: NSString = ""
var c: NSString = ""
Run Code Online (Sandbox Code Playgroud)

那么,是否可以将所有a,b,c变量声明为一行 var (a,b,c): a:NSstring=("","","")或类似的东西?

variables xcode ios swift

32
推荐指数
2
解决办法
2万
查看次数

在Xcode 7代码覆盖范围中排除文件/代码行

如何在Xcode 7中的代码覆盖率期间排除一些方法或说AppDelegate文件?

我没有使用Gcov.

iphone code-coverage objective-c ios xcode7

26
推荐指数
1
解决办法
5834
查看次数

Swift 包管理器动态库

我最近将一堆框架转换为使用 Swift 包管理器。我Package.swift看起来像这样:

// swift-tools-version:5.1
import PackageDescription

let package = Package(
    name: "MDFToolbox",
    platforms: [
        .macOS(.v10_13), .iOS(.v12), .tvOS(.v12), .watchOS(.v3)
    ],
    products: [
        .library(name: "MDFToolbox", targets: ["MDFToolbox"])
    ],
    dependencies: [
        .package(url: "git@github.com:Swinject/Swinject.git", from: "2.7.0"),
    ],
    targets: [
        .target(name: "MDFToolbox", dependencies: ["Swinject"]),
    ]
)
Run Code Online (Sandbox Code Playgroud)

由于该库曾经是一个框架,我想将它作为动态库 ( .dylib)链接到我的应用程序中。根据 Package 文档中的库产品定义,如果我愿意,我可以指定type我的库.dynamic

用于确定如何链接到库的库的可选类型。不指定此参数以让 Swift 包管理器在静态或动态链接之间进行选择(推荐)。如果您不支持这两种链接类型,请为此参数使用 .static 或 .dynamic。

如果我将它保留为nil,当我在我的应用程序项目中链接这个包时,Xcode 默认构建一个静态库,这不是我想要的。

如果我.dynamic在库的 Package.swift中将类型设置为,Xcode 会构建一个.dylib,但它不会嵌入到应用程序中,从而导致链接器错误:

dyld: Library not loaded: @rpath/libMDFToolbox.dylib
  Referenced from: /Users/mpdifran/Library/Developer/Xcode/DerivedData/Remind-eewbkbjpfrqbdwchjrbmrtxzsjew/Build/Products/Debug-maccatalyst/Remind.app/Contents/MacOS/Remind
  Reason: …
Run Code Online (Sandbox Code Playgroud)

swift swift-package-manager xcode11

17
推荐指数
1
解决办法
8335
查看次数

具有Objective-C框架的Kotlin多平台/本机互操作性

我试图在多平台项目中从Kotlin调用Swift / Objective-C代码。调用平台代码没有问题。但是,当我尝试调用某个库(或框架,因为我不是iOS开发人员而不确定如何正确调用它)时,它将失败。Docs指出,如果正确导出,可以调用Objective-C代码和Swift:

Kotlin / Native提供与Objective-C的双向互操作性。如果正确导入到构建中,则可以在Kotlin代码中使用Objective-C框架和库(默认情况下会导入系统框架)。请参阅Gradle插件文档中的“使用cinterop”。如果Swift库的API已通过@objc导出到Objective-C,则可以在Kotlin代码中使用它。尚不支持Pure Swift模块。

但这并没有说明如何正确导入它们。它仅指向gradle插件描述,该描述描述了gradle插件的旧版本。因此它对我不起作用。最后,我发现了某种可能是导入Objective-C代码的方式:

fromPreset(presets.iosX64, 'ios') {
        compilations.main.outputKinds('FRAMEWORK')
        compilations.main {
            cinterops {
                firebase {
                    def pods = '${System.getProperty("user.home")}/Projects/kmpp/iosApp/Pods/'
                    includeDirs '${pods}Firebase/CoreOnly/Sources',
                            '${pods}FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers'
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

生成运行不会失败,但是不会导入任何内容。我究竟做错了什么?是否可以完全导入这样的库?

UPD:

在这里,我找到了一个使用cinterop工具示例,如下所示:

cd samples/gitchurn
../../dist/bin/cinterop -def src/main/c_interop/libgit2.def \
 -compilerOpts -I/usr/local/include -o libgit2
Run Code Online (Sandbox Code Playgroud)

看来cinterop工具应该/dist/bin/在我的项目的文件夹中,但是没有这样的文件夹。我在哪里可以获得cinterop工具?

kotlin kotlin-interop kotlin-native kotlin-multiplatform

7
推荐指数
1
解决办法
660
查看次数

MPMusicPlayerController的当前播放队列?

我意识到有两种方法来设置回放队列(使用查询或MPMediaItems的集合),但是一旦完成,有没有办法在MPMusicPlayerController上访问队列而不必自己保留它?

如果它在控制器上公开,我想避免自己维护队列的麻烦.到目前为止,我可以访问的是当前播放的项目.我也可以获取当前正在播放的项目的索引,但如果没有队列,这将是无用的.(我觉得奇怪的是他们给你和索引,但没有队列).

mpmusicplayercontroller ios

6
推荐指数
1
解决办法
694
查看次数

CBPeripheralManager未启动

我一直收到一个错误,说我的CBPeripheralManager没有开机,但在我的代码中,我觉得我实现了这一点.这是我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // Start up the CBPeripheralManager
    _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
    // Start up the CBCentralManager

    // And somewhere to store the incoming data
    _data = [[NSMutableData alloc] init];
}

/** Required protocol method.  A full app should take care of all the possible states,
 *  but we're just waiting for  to know when the CBPeripheralManager is ready
 */
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager …
Run Code Online (Sandbox Code Playgroud)

iphone xcode bluetooth ios core-bluetooth

6
推荐指数
1
解决办法
4174
查看次数

UINavigationBarAppearance 不适用于基于图像的栏按钮项

Xcode 11.0 测试版 5 (11M382q)

当我的视图控制器之一是顶视图控制器时,我使用新的外观 API 为栏按钮项的颜色着色。我正在使用以下代码来执行此操作:

let appearance = UINavigationBarAppearance()
let attributes: [NSAttributedString.Key : Any] = [.foregroundColor : tintColor]

appearance.largeTitleTextAttributes = attributes
appearance.buttonAppearance.normal.titleTextAttributes = attributes
appearance.doneButtonAppearance.normal.titleTextAttributes = attributes

navigationItem.standardAppearance = appearance
Run Code Online (Sandbox Code Playgroud)

这似乎适用于基于文本的栏按钮项目,但基于图像的栏按钮项目保持应用程序的默认色调。这是 iOS 13 测试版中的错误吗?我已经记录了一个雷达,但只是想看看其他人是否遇到过这种情况或找到了解决方法。

正如您在下面看到的,后退箭头和加号按钮的颜色不正确。

屏幕截图显示不正确的栏按钮项目色调

ios swift ios13

6
推荐指数
1
解决办法
647
查看次数

SwiftUI CoreData NSManagedObjectContext 在环境中

我有一个问题将我的 NSManagedObjectContext 暴露给 SwiftUI 的环境。这是我的代码:

extension SceneDelegate: UIWindowSceneDelegate {

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = scene as? UIWindowScene else { return }

        let window = UIWindow(windowScene: windowScene)
        let context = PersistentContainer.shared.viewContext

        let rootView = TabBarView().environment(\.managedObjectContext, context)
        window.rootViewController = UIHostingController(rootView: rootView)

        self.window = window
        window.makeKeyAndVisible()
    }
}

class PersistentContainer: NSPersistentContainer {
    static let shared = PersistentContainer()

    private convenience init() {
        self.init(name: "App")

        viewContext.mergePolicy = NSMergePolicy(merge: .mergeByPropertyStoreTrumpMergePolicyType)
        viewContext.automaticallyMergesChangesFromParent = true

        loadPersistentStores { description, …
Run Code Online (Sandbox Code Playgroud)

core-data swift swiftui

6
推荐指数
1
解决办法
1918
查看次数