kishikawakatsumi / KeychainAccess

Simple Swift wrapper for Keychain that works on iOS, watchOS, tvOS and macOS.
MIT License
7.95k stars 789 forks source link

Entitlements error while tests #556

Open vani2 opened 1 year ago

vani2 commented 1 year ago

I have no problem with calling from the main bundle.

But I want to write a unit test, and I've got

OSStatus error:[-34018] Internal error when a required entitlement isn't present, client has neither application-identifier nor keychain-access-groups entitlements.

My project structure is following:

My package file

// swift-tools-version: 5.7
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "Modules",
    defaultLocalization: "en",
    platforms: [.iOS(.v15)],
    products: [
        .library(
            name: "Modules",
            targets: ["API"]
        )
    ],
    dependencies: [
        .package(url: "git@github.com:kishikawakatsumi/KeychainAccess.git", from: "4.2.0")
    ],
    targets: [
        .target(
            name: "API",
            dependencies: [
                .product(name: "KeychainAccess", package: "KeychainAccess")
            ]
        ),
        .testTarget(
            name: "APITests",
            dependencies: ["API"]
        )
    ]
)

I test at the iPhone Simulatore, Xcode 14.2. Keychain capability is on. I also tried https://github.com/kishikawakatsumi/KeychainAccess/issues/549#issuecomment-1304701780 but didn't help.

NikolaGrujic91 commented 1 year ago

I am experiencing the same problem.

Running unit test in swift package gives the error:

OSStatus error:[-34018] Internal error when a required entitlement isn't present, client has neither application-identifier nor keychain-access-groups entitlements.

Keychain capability is on as well.

Executing the unit test in the app project works. There is a problem with swift package not handling entitlements.

https://forums.swift.org/t/host-application-for-spm-tests/24363

nakajimayoshi commented 10 months ago

@NikolaGrujic91 @vani2 This is a while after but to anyone reading this, the solution I found was to select a host application in your unit test framework.

Targets->TestFramework->General->Testing->Host Application