Showing preview only (1,190K chars total). Download the full file or copy to clipboard to get everything.
Repository: maxgoedjen/secretive
Branch: main
Commit: 4033a5b9478c
Files: 141
Total size: 1.1 MB
Directory structure:
gitextract_rc6ccbze/
├── .github/
│ ├── FUNDING.yml
│ ├── scripts/
│ │ └── signing.sh
│ ├── templates/
│ │ └── release.md
│ └── workflows/
│ ├── codeql.yml
│ ├── nightly.yml
│ ├── oneoff.yml
│ ├── release.yml
│ └── test.yml
├── .gitignore
├── APP_CONFIG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Design/
│ └── DESIGN.md
├── FAQ.md
├── LICENSE
├── LOCALIZING.md
├── Package.swift
├── README.md
├── SECURITY.md
├── Sources/
│ ├── Config/
│ │ ├── Config.xcconfig
│ │ └── Secretive.xctestplan
│ ├── Packages/
│ │ ├── Package.swift
│ │ ├── Resources/
│ │ │ └── Localizable.xcstrings
│ │ ├── Sources/
│ │ │ ├── Brief/
│ │ │ │ ├── Documentation.docc/
│ │ │ │ │ └── Documentation.md
│ │ │ │ ├── Release.swift
│ │ │ │ ├── SemVer.swift
│ │ │ │ ├── Updater.swift
│ │ │ │ └── UpdaterProtocol.swift
│ │ │ ├── Common/
│ │ │ │ ├── BundleIDs.swift
│ │ │ │ └── URLs.swift
│ │ │ ├── SSHProtocolKit/
│ │ │ │ ├── Data+Hex.swift
│ │ │ │ ├── LengthAndData.swift
│ │ │ │ ├── OpenSSHPublicKeyWriter.swift
│ │ │ │ ├── OpenSSHReader.swift
│ │ │ │ ├── OpenSSHSignatureWriter.swift
│ │ │ │ └── SSHAgentProtocol.swift
│ │ │ ├── SecretAgentKit/
│ │ │ │ ├── Agent.swift
│ │ │ │ ├── Documentation.docc/
│ │ │ │ │ └── Documentation.md
│ │ │ │ ├── FileHandleProtocols.swift
│ │ │ │ ├── OpenSSHCertificateHandler.swift
│ │ │ │ ├── PublicKeyStandinFileController.swift
│ │ │ │ ├── SSHAgentInputParser.swift
│ │ │ │ ├── SigningRequestTracer.swift
│ │ │ │ ├── SigningWitness.swift
│ │ │ │ └── SocketController.swift
│ │ │ ├── SecretKit/
│ │ │ │ ├── Convenience/
│ │ │ │ │ └── PersistentAuthenticationHandler.swift
│ │ │ │ ├── Documentation.docc/
│ │ │ │ │ └── Documentation.md
│ │ │ │ ├── Erasers/
│ │ │ │ │ ├── AnySecret.swift
│ │ │ │ │ └── AnySecretStore.swift
│ │ │ │ ├── KeychainTypes.swift
│ │ │ │ ├── SecretStoreList.swift
│ │ │ │ └── Types/
│ │ │ │ ├── CreationOptions.swift
│ │ │ │ ├── PersistedAuthenticationContext.swift
│ │ │ │ ├── Secret.swift
│ │ │ │ ├── SecretStore.swift
│ │ │ │ └── SigningRequestProvenance.swift
│ │ │ ├── SecureEnclaveSecretKit/
│ │ │ │ ├── CryptoKitMigrator.swift
│ │ │ │ ├── Documentation.docc/
│ │ │ │ │ ├── Documentation.md
│ │ │ │ │ └── SecureEnclave.md
│ │ │ │ ├── SecureEnclave.swift
│ │ │ │ ├── SecureEnclaveSecret.swift
│ │ │ │ └── SecureEnclaveStore.swift
│ │ │ ├── SmartCardSecretKit/
│ │ │ │ ├── Documentation.docc/
│ │ │ │ │ ├── Documentation.md
│ │ │ │ │ └── SmartCard.md
│ │ │ │ ├── SmartCard.swift
│ │ │ │ ├── SmartCardSecret.swift
│ │ │ │ └── SmartCardStore.swift
│ │ │ └── XPCWrappers/
│ │ │ ├── TeamID.swift
│ │ │ ├── XPCProtocol.swift
│ │ │ ├── XPCServiceDelegate.swift
│ │ │ └── XPCTypedSession.swift
│ │ └── Tests/
│ │ ├── BriefTests/
│ │ │ ├── ReleaseParsingTests.swift
│ │ │ └── SemVerTests.swift
│ │ ├── SSHProtocolKitTests/
│ │ │ ├── OpenSSHPublicKeyWriterTests.swift
│ │ │ ├── OpenSSHReaderTests.swift
│ │ │ ├── OpenSSHSignatureWriterTests.swift
│ │ │ └── TestSecret.swift
│ │ ├── SecretAgentKitTests/
│ │ │ ├── AgentTests.swift
│ │ │ ├── StubStore.swift
│ │ │ └── StubWitness.swift
│ │ └── SecretKitTests/
│ │ └── AnySecretTests.swift
│ ├── SecretAgent/
│ │ ├── AppDelegate.swift
│ │ ├── Info.plist
│ │ ├── InternetAccessPolicy.plist
│ │ ├── Notifier.swift
│ │ ├── Preview Content/
│ │ │ └── Preview Assets.xcassets/
│ │ │ └── Contents.json
│ │ ├── SecretAgent.entitlements
│ │ ├── XPCInputParser.swift
│ │ └── en.lproj/
│ │ └── Main.storyboard
│ ├── SecretAgentInputParser/
│ │ ├── Info.plist
│ │ ├── SecretAgentInputParser.entitlements
│ │ ├── SecretAgentInputParser.swift
│ │ └── main.swift
│ ├── Secretive/
│ │ ├── App.swift
│ │ ├── AppIcon.icon/
│ │ │ └── icon.json
│ │ ├── Controllers/
│ │ │ ├── AgentStatusChecker.swift
│ │ │ ├── ApplicationDirectoryController.swift
│ │ │ └── JustUpdatedChecker.swift
│ │ ├── Info.plist
│ │ ├── InternetAccessPolicy.plist
│ │ ├── Preview Content/
│ │ │ ├── Preview Assets.xcassets/
│ │ │ │ └── Contents.json
│ │ │ ├── PreviewAgentStatusChecker.swift
│ │ │ ├── PreviewStore.swift
│ │ │ └── PreviewUpdater.swift
│ │ ├── Secretive.entitlements
│ │ └── Views/
│ │ ├── Configuration/
│ │ │ ├── ConfigurationItemView.swift
│ │ │ ├── GettingStartedView.swift
│ │ │ ├── Instructions.swift
│ │ │ ├── IntegrationsView.swift
│ │ │ ├── SetupView.swift
│ │ │ └── ToolConfigurationView.swift
│ │ ├── Modifiers/
│ │ │ ├── ActionButtonStyle.swift
│ │ │ ├── BoxBackgroundStyle.swift
│ │ │ ├── ErrorStyle.swift
│ │ │ ├── ToolbarButtonStyle.swift
│ │ │ └── WindowBackgroundStyle.swift
│ │ ├── Secrets/
│ │ │ ├── CreateSecretView.swift
│ │ │ ├── DeleteSecretView.swift
│ │ │ ├── EditSecretView.swift
│ │ │ ├── EmptyStoreView.swift
│ │ │ ├── NoStoresView.swift
│ │ │ ├── SecretDetailView.swift
│ │ │ ├── SecretListItemView.swift
│ │ │ └── StoreListView.swift
│ │ └── Views/
│ │ ├── AboutView.swift
│ │ ├── AgentStatusView.swift
│ │ ├── ContentView.swift
│ │ ├── CopyableView.swift
│ │ └── UpdateView.swift
│ ├── Secretive.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ ├── PackageTests.xcscheme
│ │ ├── SecretAgent.xcscheme
│ │ └── Secretive.xcscheme
│ └── SecretiveUpdater/
│ ├── Info.plist
│ ├── InternetAccessPolicy.plist
│ ├── SecretiveUpdater.entitlements
│ ├── SecretiveUpdater.swift
│ └── main.swift
└── configure_team_id.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
github: maxgoedjen
================================================
FILE: .github/scripts/signing.sh
================================================
#!/bin/bash
# Import certificate and private key
echo $SIGNING_DATA | base64 -d -o Signing.p12
security create-keychain -p ci ci.keychain
security default-keychain -s ci.keychain
security list-keychains -s ci.keychain
security import ./Signing.p12 -k ci.keychain -P $SIGNING_PASSWORD -A
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k ci ci.keychain
# Import Profiles
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
echo $HOST_PROFILE_DATA | base64 -d -o Host.provisionprofile
HOST_UUID=`grep UUID -A1 -a Host.provisionprofile | grep -io "[-A-F0-9]\{36\}"`
cp Host.provisionprofile ~/Library/MobileDevice/Provisioning\ Profiles/$HOST_UUID.provisionprofile
echo $AGENT_PROFILE_DATA | base64 -d -o Agent.provisionprofile
AGENT_UUID=`grep UUID -A1 -a Agent.provisionprofile | grep -io "[-A-F0-9]\{36\}"`
cp Agent.provisionprofile ~/Library/MobileDevice/Provisioning\ Profiles/$AGENT_UUID.provisionprofile
# Create directories for ASC key
mkdir ~/.private_keys
echo -n "$APPLE_API_KEY_DATA" > ~/.private_keys/AuthKey_$APPLE_API_KEY_ID.p8
================================================
FILE: .github/templates/release.md
================================================
Update description
## Features
## Fixes
## Minimum macOS Version
## Build
https://github.com/maxgoedjen/secretive/actions/runs/RUN_ID
## Attestation
https://github.com/maxgoedjen/secretive/attestations/ATTESTATION_ID
================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL Advanced"
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '26 15 * * 3'
jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ${{ (matrix.language == 'swift' && 'macos-26') || 'ubuntu-latest' }}
permissions:
security-events: write
packages: read
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: actions
build-mode: none
# Disable this until CodeQL supports Xcode 26 builds.
# - language: swift
# build-mode: manual
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
- if: matrix.build-mode == 'manual'
name: "Select Xcode"
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
- if: matrix.build-mode == 'manual'
name: "Build"
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme Secretive CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
================================================
FILE: .github/workflows/nightly.yml
================================================
name: Nightly
on:
schedule:
- cron: "0 8 * * *"
jobs:
build:
runs-on: macos-26
permissions:
id-token: write
contents: write
attestations: write
actions: read
timeout-minutes: 10
steps:
- uses: actions/checkout@v5
- name: Setup Signing
env:
SIGNING_DATA: ${{ secrets.SIGNING_DATA }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
HOST_PROFILE_DATA: ${{ secrets.HOST_PROFILE_DATA }}
AGENT_PROFILE_DATA: ${{ secrets.AGENT_PROFILE_DATA }}
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
run: ./.github/scripts/signing.sh
- name: Set Environment
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
- name: Update Build Number
env:
RUN_ID: ${{ github.run_id }}
run: |
DATE=$(date "+%Y-%m-%d")
sed -i '' -e "s/GITHUB_CI_VERSION/0.0.0_nightly-$DATE/g" Sources/Config/Config.xcconfig
sed -i '' -e "s/GITHUB_BUILD_NUMBER/1.$RUN_ID/g" Sources/Config/Config.xcconfig
sed -i '' -e "s/GITHUB_BUILD_URL/https:\/\/github.com\/maxgoedjen\/secretive\/actions\/runs\/$RUN_ID/g" Sources/Config/Config.xcconfig
- name: Build
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme Secretive -configuration Release -archivePath Archive.xcarchive archive
- name: Move to Artifact Folder
run: mkdir Artifact; cp -r Archive.xcarchive/Products/Applications/Secretive.app Artifact
- name: Upload App to Artifacts
id: upload
uses: actions/upload-artifact@v4
with:
name: Secretive
path: Artifact
- name: Download Zipped Artifact
id: download
env:
ZIP_ID: ${{ steps.upload.outputs.artifact-id }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -L -H "Authorization: Bearer $GITHUB_TOKEN" -L \
https://api.github.com/repos/maxgoedjen/secretive/actions/artifacts/$ZIP_ID/zip > Secretive.zip
- name: Notarize
env:
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
run: xcrun notarytool submit --key ~/.private_keys/AuthKey_$APPLE_API_KEY_ID.p8 --key-id $APPLE_API_KEY_ID --issuer $APPLE_API_ISSUER Secretive.zip
- name: Attest
id: attest
uses: actions/attest-build-provenance@v2
with:
subject-name: "Secretive.zip"
subject-digest: sha256:${{ steps.upload.outputs.artifact-digest }}
================================================
FILE: .github/workflows/oneoff.yml
================================================
name: One-Off Build
on:
workflow_dispatch:
jobs:
build:
runs-on: macos-26
permissions:
id-token: write
contents: write
attestations: write
actions: read
timeout-minutes: 10
steps:
- uses: actions/checkout@v5
- name: Setup Signing
env:
SIGNING_DATA: ${{ secrets.SIGNING_DATA }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
HOST_PROFILE_DATA: ${{ secrets.HOST_PROFILE_DATA }}
AGENT_PROFILE_DATA: ${{ secrets.AGENT_PROFILE_DATA }}
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
run: ./.github/scripts/signing.sh
- name: Set Environment
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
- name: Update Build Number
env:
RUN_ID: ${{ github.run_id }}
run: |
DATE=$(date "+%Y-%m-%d")
sed -i '' -e "s/GITHUB_CI_VERSION/0.0.0_oneoff-$DATE/g" Sources/Config/Config.xcconfig
sed -i '' -e "s/GITHUB_BUILD_NUMBER/1.$RUN_ID/g" Sources/Config/Config.xcconfig
sed -i '' -e "s/GITHUB_BUILD_URL/https:\/\/github.com\/maxgoedjen\/secretive\/actions\/runs\/$RUN_ID/g" Sources/Config/Config.xcconfig
- name: Build
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme Secretive -configuration Release -archivePath Archive.xcarchive archive
- name: Move to Artifact Folder
run: mkdir Artifact; cp -r Archive.xcarchive/Products/Applications/Secretive.app Artifact
- name: Upload App to Artifacts
id: upload
uses: actions/upload-artifact@v4
with:
name: Secretive
path: Artifact
- name: Download Zipped Artifact
id: download
env:
ZIP_ID: ${{ steps.upload.outputs.artifact-id }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -L -H "Authorization: Bearer $GITHUB_TOKEN" -L \
https://api.github.com/repos/maxgoedjen/secretive/actions/artifacts/$ZIP_ID/zip > Secretive.zip
- name: Notarize
env:
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
run: xcrun notarytool submit --key ~/.private_keys/AuthKey_$APPLE_API_KEY_ID.p8 --key-id $APPLE_API_KEY_ID --issuer $APPLE_API_ISSUER Secretive.zip
- name: Attest
id: attest
uses: actions/attest-build-provenance@v2
with:
subject-name: "Secretive.zip"
subject-digest: sha256:${{ steps.upload.outputs.artifact-digest }}
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
on:
push:
tags:
- '*'
jobs:
test:
permissions:
contents: read
runs-on: macos-26
timeout-minutes: 10
steps:
- uses: actions/checkout@v5
- name: Setup Signing
env:
SIGNING_DATA: ${{ secrets.SIGNING_DATA }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
HOST_PROFILE_DATA: ${{ secrets.HOST_PROFILE_DATA }}
AGENT_PROFILE_DATA: ${{ secrets.AGENT_PROFILE_DATA }}
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
run: ./.github/scripts/signing.sh
- name: Set Environment
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
- name: Test
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme PackageTests test
# SPM doesn't seem to pick up on the tests currently?
# run: swift test --build-system swiftbuild --package-path Sources/Packages
build:
permissions:
id-token: write
contents: write
attestations: write
actions: read
runs-on: macos-26
timeout-minutes: 10
steps:
- uses: actions/checkout@v5
- name: Setup Signing
env:
SIGNING_DATA: ${{ secrets.SIGNING_DATA }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
HOST_PROFILE_DATA: ${{ secrets.HOST_PROFILE_DATA }}
AGENT_PROFILE_DATA: ${{ secrets.AGENT_PROFILE_DATA }}
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
run: ./.github/scripts/signing.sh
- name: Set Environment
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
- name: Update Build Number
env:
TAG_NAME: ${{ github.ref }}
RUN_ID: ${{ github.run_id }}
run: |
export CLEAN_TAG=$(echo $TAG_NAME | sed -e 's/refs\/tags\/v//')
sed -i '' -e "s/GITHUB_CI_VERSION/$CLEAN_TAG/g" Sources/Config/Config.xcconfig
sed -i '' -e "s/GITHUB_BUILD_NUMBER/1.$RUN_ID/g" Sources/Config/Config.xcconfig
sed -i '' -e "s/GITHUB_BUILD_URL/github.com\/maxgoedjen\/secretive\/actions\/runs\/$RUN_ID/g" Sources/Config/Config.xcconfig
- name: Build
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme Secretive -configuration Release -archivePath Archive.xcarchive archive
- name: Move to Artifact Folder
run: mkdir Artifact; cp -r Archive.xcarchive/Products/Applications/Secretive.app Artifact
- name: Upload App to Artifacts
id: upload
uses: actions/upload-artifact@v4
with:
name: Secretive.zip
path: Artifact
- name: Download Zipped Artifact
id: download
env:
ZIP_ID: ${{ steps.upload.outputs.artifact-id }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -L -H "Authorization: Bearer $GITHUB_TOKEN" -L \
https://api.github.com/repos/maxgoedjen/secretive/actions/artifacts/$ZIP_ID/zip > Secretive.zip
- name: Notarize
env:
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
run: xcrun notarytool submit --key ~/.private_keys/AuthKey_$APPLE_API_KEY_ID.p8 --key-id $APPLE_API_KEY_ID --issuer $APPLE_API_ISSUER Secretive.zip
- name: Attest
id: attest
uses: actions/attest-build-provenance@v2
with:
subject-path: "Secretive.zip"
- name: Create Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG_NAME: ${{ github.ref }}
RUN_ID: ${{ github.run_id }}
ATTESTATION_ID: ${{ steps.attest.outputs.attestation-id }}
run: |
sed -i.tmp "s/RUN_ID/$RUN_ID/g" .github/templates/release.md
sed -i.tmp "s/ATTESTATION_ID/$ATTESTATION_ID/g" .github/templates/release.md
gh release create $TAG_NAME -d -F .github/templates/release.md
gh release upload $TAG_NAME Secretive.zip
================================================
FILE: .github/workflows/test.yml
================================================
name: Test
on: [push, pull_request]
jobs:
test:
permissions:
contents: read
runs-on: macos-26
timeout-minutes: 10
steps:
- uses: actions/checkout@v5
- name: Set Environment
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
- name: Test Main Packages
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme PackageTests test
# SPM doesn't seem to pick up on the tests currently?
# run: swift test --build-system swiftbuild --package-path Sources/Packages
- name: Test SecretKit Packages
run: swift test --build-system swiftbuild
================================================
FILE: .gitignore
================================================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
xcuserdata/
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
## Obj-C/Swift specific
*.hmap
## App packaging
*.ipa
*.dSYM.zip
*.dSYM
## Playgrounds
timeline.xctimeline
playground.xcworkspace
# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
# .swiftpm
.build/
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build/
# Accio dependency management
Dependencies/
.accio/
# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
# Build script products
Archive.xcarchive
.DS_Store
contents.xcworkspacedata
# Per-User Configs
Sources/Config/OpenSource.xcconfig
================================================
FILE: APP_CONFIG.md
================================================
# App Configuration
Instructions for setting up apps and shells has moved to [secretive-config-instructions](https://github.com/maxgoedjen/secretive-config-instructions)!
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at max.goedjen@gmail.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Secretive
Thanks for your interest in contributing to Secretive! Before you contribute, there are a few things I'd like to lay out.
## Security
Security is obviously paramount for a project like Secretive. As such, any contributions that compromise the security or auditabilty of the project will be rejected.
### Dependencies
Secretive is designed to be easily auditable by people who are considering using it. In keeping with this, Secretive has no third party dependencies, and any contributions which bring in new dependencies will be rejected.
## Code of Conduct
All contributors must abide by the [Code of Conduct](CODE_OF_CONDUCT.md)
## Localization
If you'd like to contribute a translation, please see [Localizing](LOCALIZING.md) to get started.
## Credits
If you make a material contribution to the app, please add yourself to the end of the [credits](https://github.com/maxgoedjen/secretive/blob/main/Sources/Secretive/Credits.rtf).
## Collaborator Status
I will not grant collaborator access to any contributors for this repository. This is basically just because collaborators [can accesss the secrets Secretive uses for the signing credentials stored in the repository](https://docs.github.com/en/actions/reference/encrypted-secrets#accessing-your-secrets).
## Secretive is Opinionated
I'm releasing Secretive as open source so that other people can use it and audit it, feeling comfortable in knowing that the source is available so they can see what it's doing. I have a pretty strong idea of what I'd like this project to look like, and I may respectfully decline contributions that don't line up with that vision. If you'd like to propose a change before implementing, please feel free to [Open an Issue with the proposed tag](https://github.com/maxgoedjen/secretive/issues/new?labels=proposed).
================================================
FILE: Design/DESIGN.md
================================================
# Design
The art assets for the App Icon and GitHub image are located on [Sketch Cloud](https://www.sketch.com/s/574333cd-8ceb-40e1-a6d9-189da3f1e5dd).
================================================
FILE: FAQ.md
================================================
# FAQ
### How do I import my current SSH keys, or export my Secretive Keys?
The secure enclave doesn't allow import or export of private keys. For any new computer, you should just create a new set of keys. If you're using a smart card, you _might_ be able to export your private key from the vendor's software.
### Secretive doesn't work with my git client/app
Secretive relies on the `SSH_AUTH_SOCK` environment variable being respected. The `git` and `ssh` command line tools natively respect this, but third party apps may require some configuration to work. A non-exhaustive list of setup steps is provided in the [secretive-config-instructions](https://github.com/maxgoedjen/secretive-config-instructions) repo.
### Secretive isn't working for me
Please run `ssh -Tv git@github.com` in your terminal and paste the output in a [new GitHub issue](https://github.com/maxgoedjen/secretive/issues/new) with a description of your issue.
### Secretive was working for me, but now it has stopped
Try running the "Setup Secretive" process by clicking on "Help", then "Setup Secretive." If that doesn't work, follow the process above.
### Secretive prompts me to type my password instead of using my Apple Watch
1) Make sure you have enabled "Use your Apple Watch to unlock apps and your Mac" in System Preferences --> Security & Privacy:

2) Ensure that unlocking your Mac with Apple Watch is working (lock and unlock at least once)
3) Now you should get prompted on the watch when your key is accessed. Double click the side button to approve:


### How do I tell SSH to use a specific key?
Beginning with Secretive 2.2, every secret has an automatically generated public key file representation on disk, and the path to it is listed under "Public Key Path" in Secretive. You can specify that you want to use that key in your `~/.ssh/config`. [This ServerFault answer](https://serverfault.com/a/295771) has more details on setting that up.
### How can I generate an RSA key?
The Mac's Secure Enclave only supports 256-bit EC keys, so inherently Secretive cannot support generating RSA keys.
### Can I use Secretive for SSH Agent Forwarding?
Yes, you can! Once you've set up Secretive, just add `ForwardAgent yes` to the hosts you want to forward to in your SSH config file. Afterwards, any use of one of your SSH keys on the remote host must be authenticated through Secretive.
### Why should I trust you?
You shouldn't, for a piece of software like this. Secretive, by design, has an auditable build process. Each build has a fully auditable build log, showing the source it was built from and a SHA of the build product. You can check the SHA of the zip you download against the SHA output in the build log (which is linked in the About window).
### I want to build Secretive from source
Awesome! Just bear in mind that because an app only has access to the keychain items that it created, if you have secrets that you created with the prebuilt version of Secretive, you'll be unable to access them using your own custom build (since you'll have changed the bundled ID).
### What's this network request to GitHub?
Secretive checks in with GitHub's releases API to check if there's a new version of Secretive available. You can audit the source code for this feature [here](https://github.com/maxgoedjen/secretive/blob/main/Sources/Packages/Sources/Brief/Updater.swift).
### How do I uninstall Secretive?
Drag Secretive.app to the trash and remove `~/Library/Containers/com.maxgoedjen.Secretive.SecretAgent`. `SecretAgent` may continue running until you quit it or reboot.
### I have a security issue
Please contact [max.goedjen@gmail.com](mailto:max.goedjen@gmail.com) with a subject containing "SECRETIVE SECURITY" immediately with details, and I'll address the issue and credit you ASAP.
### I have a non-security related bug
Please file a [GitHub issue](https://github.com/maxgoedjen/secretive/issues/new) for it. I will not provide email support with the exception of the critical security issues mentioned above.
### I want to contribute to Secretive
Sweet! Please check out the [contributing guidelines](CONTRIBUTING.md) and go from there.
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2020 Max Goedjen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: LOCALIZING.md
================================================
# Localizing Secretive
If you speak another language, and would like to help translate Secretive to support that language, we'd love your help!
## Crowdin
[Secretive uses Crowdin for localization](https://crowdin.com/project/secretive/). Open the link and select your language to translate!
### Manual Translation
Crowdin is the easiest way to translate Secretive, but I'm happy to accept Pull Requests directly as well.
### Questions
Please open an issue if you have a question about translating the app. I'm more than happy to clarify any terms that are ambiguous or confusing. Thanks for contributing!
### Thank You
Thanks to all the folks who have contributed localizations so far!
- @mtardy for the French localization
- @GravityRyu for the Chinese localization
- @Saeger for the Portuguese (Brazil) localization
- @moritzsternemann for the German localization
- @RoboRich00A16 for the Italian localization
- @akx for the Finnish localization
- @mog422 for the Korean localization
- @niw for the Japanese localization
- @truita for the Catalan localization
- @Adimac93 for the Polish localization
- @alongotv for the Russian localization
A special thanks to [Crowdin](https://crowdin.com) for their [generous support of open source projects](https://crowdin.com/page/open-source-project-setup-request).
================================================
FILE: Package.swift
================================================
// swift-tools-version:6.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
// This is basically the same package as `Sources/Packages/Package.swift`, but thinned slightly.
// Ideally this would be the same package, but SPM requires it to be at the root of the project,
// and Xcode does _not_ like that, so they're separate.
let package = Package(
name: "SecretKit",
defaultLocalization: "en",
platforms: [
.macOS(.v14)
],
products: [
.library(
name: "SecretKit",
targets: ["SecretKit"]),
.library(
name: "SecureEnclaveSecretKit",
targets: ["SecureEnclaveSecretKit"]),
.library(
name: "SmartCardSecretKit",
targets: ["SmartCardSecretKit"]),
.library(
name: "SSHProtocolKit",
targets: ["SSHProtocolKit"]),
],
dependencies: [
],
targets: [
.target(
name: "SecretKit",
dependencies: [],
path: "Sources/Packages/Sources/SecretKit",
resources: [localization],
swiftSettings: swiftSettings
),
.testTarget(
name: "SecretKitTests",
dependencies: ["SecretKit", "SecureEnclaveSecretKit", "SmartCardSecretKit"],
path: "Sources/Packages/Tests/SecretKitTests",
swiftSettings: swiftSettings
),
.target(
name: "SecureEnclaveSecretKit",
dependencies: ["SecretKit"],
path: "Sources/Packages/Sources/SecureEnclaveSecretKit",
resources: [localization],
swiftSettings: swiftSettings
),
.target(
name: "SmartCardSecretKit",
dependencies: ["SecretKit"],
path: "Sources/Packages/Sources/SmartCardSecretKit",
resources: [localization],
swiftSettings: swiftSettings
),
.target(
name: "SSHProtocolKit",
dependencies: ["SecretKit"],
path: "Sources/Packages/Sources/SSHProtocolKit",
resources: [localization],
swiftSettings: swiftSettings,
),
.testTarget(
name: "SSHProtocolKitTests",
dependencies: ["SSHProtocolKit"],
path: "Sources/Packages/Tests/SSHProtocolKitTests",
swiftSettings: swiftSettings,
),
]
)
var localization: Resource {
.process("../../Resources/Localizable.xcstrings")
}
var swiftSettings: [PackageDescription.SwiftSetting] {
[
.swiftLanguageMode(.v6),
// This freaks out Xcode in a dependency context.
// .treatAllWarnings(as: .error),
]
}
================================================
FILE: README.md
================================================
# Secretive [](https://github.com/maxgoedjen/secretive/actions/workflows/test.yml) 
Secretive is an app for protecting and managing SSH keys with the Secure Enclave.
<picture>
<source media="(prefers-color-scheme: dark)" srcset="/.github/readme/app-dark.png">
<source media="(prefers-color-scheme: light)" srcset="/.github/readme/app-light.png">
<img src="/.github/readme/app-dark.png" alt="Screenshot of Secretive" width="600">
</picture>
## Why?
### Safer Storage
The most common setup for SSH keys is just keeping them on disk, guarded by proper permissions. This is fine in most cases, but it's not super hard for malicious users or malware to copy your private key. If you protect your keys with the Secure Enclave, it's impossible to export them, by design.
### Access Control
If your Mac has a Secure Enclave, it also has support for strong access controls like Touch ID, or authentication with Apple Watch. You can configure your keys so that they require Touch ID (or Watch) authentication before they're accessed.
<img src="/.github/readme/touchid.png" alt="Screenshot of Secretive authenticating with Touch ID" width="400">
### Notifications
Secretive also notifies you whenever your keys are accessed, so you're never caught off guard.
<img src="/.github/readme/notification.png" alt="Screenshot of Secretive notifying the user" width="600">
### Support for Smart Cards Too!
For Macs without Secure Enclaves, you can configure a Smart Card (such as a YubiKey) and use it for signing as well.
## Getting Started
### Installation
#### Direct Download
You can download the latest release over on the [Releases Page](https://github.com/maxgoedjen/secretive/releases)
#### Using Homebrew
brew install secretive
### FAQ
There's a [FAQ here](FAQ.md).
### Auditable Build Process
Builds are produced by GitHub Actions with an auditable build and release generation process. Starting with Secretive 3.0, builds are attested using [GitHub Artifact Attestation](https://docs.github.com/en/actions/concepts/security/artifact-attestations). Attestations are viewable in the build log for a build, and also on the [main attestation page](https://github.com/maxgoedjen/secretive/attestations).
### A Note Around Code Signing and Keychains
While Secretive uses the Secure Enclave to protect keys, it still relies on Keychain APIs to store and access them. Keychain restricts reads of keys to the app (and specifically, the bundle ID) that created them. If you build Secretive from source, make sure you are consistent in which bundle ID you use so that the Keychain is able to locate your keys.
### Backups and Transfers to New Machines
Because secrets in the Secure Enclave are not exportable, they are not able to be backed up, and you will not be able to transfer them to a new machine. If you get a new Mac, just create a new set of secrets specific to that Mac.
## Security
Secretive's security policy is detailed in [SECURITY.md](SECURITY.md). To report security issues, please use [GitHub's private reporting feature.](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability#privately-reporting-a-security-vulnerability)
## Acknowledgements
### sekey
Secretive was inspired by the [sekey project](https://github.com/sekey/sekey).
### Localization
Secretive is localized to many languages by a generous team of volunteers. To learn more, see [LOCALIZING.md](LOCALIZING.md). Secretive's localization workflow is generously provided by [Crowdin](https://crowdin.com).
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Security Principles
Secretive is designed with a few general tenets in mind:
### It's Hard to Leak a Key Secretive Can't Read The Key Material
Secretive only operates on hardware-backed keys. In general terms, this means that it should be _very_ hard for Secretive to have any sort of bug that causes a key to be shared, because Secretive can't access private key data even if it wants to.
### Simplicity and Auditability
Secretive won't expand to have every feature it could possibly have. Part of the goal of the app is that it is possible for consumers to reasonably audit the code, and that often means not implementing features that might be cool, but which would significantly inflate the size of the codebase.
### Dependencies
Both in support of the previous principle and to rule out supply chain attacks, Secretive does not rely on any third party dependencies.
There are limited exceptions to this, particularly in the build process, but the app itself does not depend on any third party code.
## Supported Versions
The latest version on the [Releases page](https://github.com/maxgoedjen/secretive/releases) is the only currently supported version.
## Reporting a Vulnerability
To report security issues, please use [GitHub's private reporting feature.](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability#privately-reporting-a-security-vulnerability)
================================================
FILE: Sources/Config/Config.xcconfig
================================================
CI_VERSION = GITHUB_CI_VERSION
CI_BUILD_NUMBER = GITHUB_BUILD_NUMBER
CI_BUILD_LINK = GITHUB_BUILD_URL
#include? "OpenSource.xcconfig"
SECRETIVE_BASE_BUNDLE_ID = $(SECRETIVE_BASE_BUNDLE_ID_OSS:default=com.maxgoedjen.Secretive)
SECRETIVE_DEVELOPMENT_TEAM = $(SECRETIVE_DEVELOPMENT_TEAM_OSS:default=Z72PRUAWF6)
================================================
FILE: Sources/Config/Secretive.xctestplan
================================================
{
"configurations" : [
{
"id" : "5896AE5A-6D5A-48D3-837B-668B646A3273",
"name" : "Configuration 1",
"options" : {
}
}
],
"defaultOptions" : {
},
"testTargets" : [
{
"target" : {
"containerPath" : "container:Packages",
"identifier" : "BriefTests",
"name" : "BriefTests"
}
},
{
"target" : {
"containerPath" : "container:Packages",
"identifier" : "SecretKitTests",
"name" : "SecretKitTests"
}
},
{
"target" : {
"containerPath" : "container:Packages",
"identifier" : "SecretAgentKitTests",
"name" : "SecretAgentKitTests"
}
}
],
"version" : 1
}
================================================
FILE: Sources/Packages/Package.swift
================================================
// swift-tools-version:6.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "SecretivePackages",
defaultLocalization: "en",
platforms: [
.macOS(.v14)
],
products: [
.library(
name: "SecretKit",
targets: ["SecretKit"]),
.library(
name: "SecureEnclaveSecretKit",
targets: ["SecureEnclaveSecretKit"]),
.library(
name: "SmartCardSecretKit",
targets: ["SmartCardSecretKit"]),
.library(
name: "SecretAgentKit",
targets: ["SecretAgentKit"]),
.library(
name: "Common",
targets: ["Common"]),
.library(
name: "Brief",
targets: ["Brief"]),
.library(
name: "XPCWrappers",
targets: ["XPCWrappers"]),
.library(
name: "SSHProtocolKit",
targets: ["SSHProtocolKit"]),
],
dependencies: [
],
targets: [
.target(
name: "SecretKit",
dependencies: [],
resources: [localization],
swiftSettings: swiftSettings,
),
.testTarget(
name: "SecretKitTests",
dependencies: ["SecretKit", "SecretAgentKit", "SecureEnclaveSecretKit", "SmartCardSecretKit"],
swiftSettings: swiftSettings,
),
.target(
name: "SecureEnclaveSecretKit",
dependencies: ["SecretKit"],
resources: [localization],
swiftSettings: swiftSettings,
),
.target(
name: "SmartCardSecretKit",
dependencies: ["SecretKit"],
resources: [localization],
swiftSettings: swiftSettings,
),
.target(
name: "SecretAgentKit",
dependencies: ["SecretKit", "SSHProtocolKit", "Common"],
resources: [localization],
swiftSettings: swiftSettings,
),
.testTarget(
name: "SecretAgentKitTests",
dependencies: ["SecretAgentKit"],
),
.target(
name: "SSHProtocolKit",
dependencies: ["SecretKit"],
resources: [localization],
swiftSettings: swiftSettings,
),
.testTarget(
name: "SSHProtocolKitTests",
dependencies: ["SSHProtocolKit"],
swiftSettings: swiftSettings,
),
.target(
name: "Common",
dependencies: ["SSHProtocolKit", "SecretKit"],
resources: [localization],
swiftSettings: swiftSettings,
),
.target(
name: "Brief",
dependencies: ["XPCWrappers", "SSHProtocolKit"],
resources: [localization],
swiftSettings: swiftSettings,
),
.testTarget(
name: "BriefTests",
dependencies: ["Brief"],
),
.target(
name: "XPCWrappers",
swiftSettings: swiftSettings,
),
]
)
var localization: Resource {
.process("../../Resources/Localizable.xcstrings")
}
var swiftSettings: [PackageDescription.SwiftSetting] {
[
.swiftLanguageMode(.v6),
.treatAllWarnings(as: .error),
.strictMemorySafety()
]
}
================================================
FILE: Sources/Packages/Resources/Localizable.xcstrings
================================================
{
"sourceLanguage" : "en",
"strings" : {
"" : {
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"ca" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"de" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"fi" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"fr" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"ja" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"ko" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"pl" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"ru" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "new",
"value" : ""
}
}
},
"shouldTranslate" : false
},
"**%@** (%@)" : {
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"ca" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"de" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"fi" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"fr" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"ja" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"ko" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"pl" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"ru" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "new",
"value" : "**%1$@** (%2$@)"
}
}
},
"shouldTranslate" : false
},
"about_build_log_button" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"ca" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"de" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"fi" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Journal de version"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "ビルドログ"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "빌드 로그"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"pl" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"ru" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Build Log"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "构建日志"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "構建日誌"
}
}
}
},
"about_menu_bar_title" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"ca" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"de" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"fi" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "A propos"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretiveについて"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive에 대해서"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"pl" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"ru" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "About Secretive"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "关于Secretive"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "關於Secretive"
}
}
}
},
"about_open_source_notice" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"ca" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"de" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"fi" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive est Open Source et sous licence MIT"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretiveはオープンソースです。MITライセンスで提供されています。"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive는 오픈 소스이며 MIT 라이선스입니다"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"pl" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"ru" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive is Open Source and MIT Licensed"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive是开源软件并以MIT协议授权"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive是開源軟體並以MIT協議授權"
}
}
}
},
"about_thanks" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"ca" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"de" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"fi" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Remerciements spéciaux à nos [Contributeurs](%1$(contributorsLink)@) et [Mécène](%2$(sponsorsLink)@)"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "[コントリビューター](%1$(contributorsLink)@)と[スポンサー](%2$(sponsorsLink)@)に感謝します"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "[기여자](%1$(contributorsLink)@)와 [후원자](%2$(sponsorsLink)@)에게 특별히 감사드립니다"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"pl" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"ru" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "特别感谢我们的[贡献者](%1$(contributorsLink)@)和[赞助者](%2$(sponsorsLink)@)"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "特別感謝我們的[貢獻者](%1$(contributorsLink)@)和[贊助者](%2$(sponsorsLink)@)"
}
}
}
},
"about_view_on_github_button" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"ca" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"de" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"fi" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Voir sur GitHub"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "GitHub"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "GitHub에서 보기"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"pl" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"ru" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "View on GitHub"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "在GitHub上查看"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "在GitHub上檢視"
}
}
}
},
"agent_details_could_not_start_error" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive no ha aconseguit arrancar l'agent segur (SecretAgent). Prova de reiniciar el teu Mac, i si açò no funciona, obri una “issue” al GitHub."
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive konnte den SecretAgent nicht starten. Bitte versuche Deinen Mac neu zu starten und wenn das nicht funktioniert, ein Issue auf GitHub zu erstellen."
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Το Secretive δεν μπόρεσε να εκκινήσει τον SecretAgent. Παρακαλώ δοκιμάστε να επανεκκινήσετε τον Mac σας, και αν αυτό δεν λειτουργήσει, ανοίξτε ένα issue στο GitHub."
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive ei saanut SecretAgent-apuohjelmaa käyntiin. Kokeile käynnistää Macisi uudestaan, ja jos se ei tepsi, raportoi ongelmasta GitHubissa."
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive n'a pas pu démarrer le SecretAgent. Veuillez redémarrer votre Mac, si cela ne fonctionne pas, signalez le problème sur GitHub."
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretiveアプリはSecretAgentを起動できませんでした。Macを再起動するか、それでも起動しない場合はGitHubのIssueで問題を報告してください。"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive에서 SecretAgent를 실행할 수 없습니다. Mac을 재시작해 보시고, 그래도 문제가 해결되지 않으면 GitHub에 문제를 제출해 주세요."
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive nie udało się uruchomić programu SecretAgent. Spróbuj ponownie uruchomić komputer Mac, a jeśli to nie zadziała, zgłoś problem na GitHub."
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive não foi capaz de obter o SecretAgent para iniciar. Por favor tente reiniciar seu Mac e se isso não resolver, registre um problema em nosso GitHub."
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive не получлось запустить SecretAgent. Пожалуйста, попробуйте перезапустить Ваш Mac, и если это не поможет – создайте issue на GitHub."
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive was unable to get SecretAgent to launch. Please try restarting your Mac, and if that doesn't work, file an issue on GitHub."
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive无法启动SecretAgent。请尝试重启Mac,如果没有效果,请在GitHub上提交一个issue。"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive無法啟動SecretAgent。請嘗試重啟Mac,如果沒有效果,請在GitHub上提交一個issue。"
}
}
}
},
"agent_details_disable_agent_button" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Desactiva l'agent"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent deaktivieren"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Απενεργοποίηση Πράκτορα"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Poista agentti käytöstä"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Désactiver l'agent"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "エージェントを無効にする"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "에이전트 비활성화"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Wyłącz Agenta"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Desabilitar o Agente"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Отключить агент"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Disable Agent"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "禁用Agent"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "禁用Agent"
}
}
}
},
"agent_details_restart_agent_button" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Reinicia l'agent"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent neu starten"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Επανεκκίνηση Πράκτορα"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Käynnistä agentti uudelleen"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Redémarrer l'agent"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "エージェントを再起動"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "에이전트 재시작"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Zrestartuj Agenta"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Reiniciar o Agente"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Перезапустить агент"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Restart Agent"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "重启Agent"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "重啟Agent"
}
}
}
},
"agent_details_running_since_title" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Funcionant des de"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Läuft seit"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Εκτελείται Από"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Käynnissä alkaen"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Actif depuis"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "最後に起動した日時"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "실행 시각"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Uruchomiony od"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Rodando desde"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Запущено с"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Running Since"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "运行时间始于"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "執行時間始於"
}
}
}
},
"agent_details_socket_path_title" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Camí del sòcol"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Socket-Pfad"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Socket Path"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Socket-polku"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Chemin vers le socket"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "ソケットのパス"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "소켓 경로"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ścieżka Socketu"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Caminho do Socket"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Путь к сокету"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Socket Path"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Socket路径"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Socket路徑"
}
}
}
},
"agent_details_start_agent_button" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Inicia l'agent"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent starten"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Έναρξη SecretAgent"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Käynnistä agentti"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Démarrer l'agent"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "エージェントを起動"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "에이전트 시작"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Uruchom Agenta"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Iniciar o Agente"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Запустить агент"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Start Agent"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "启动Agent"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "啟動Agent"
}
}
}
},
"agent_details_start_agent_button_starting" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Iniciant l'agent"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent wird gestartet"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Έναρξη Πράκτορα"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agentti käynnistyy"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Démarrage de l'agent"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "エージェントを起動中"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "에이전트 시작중"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Uruchamianie Agenta"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agente iniciando"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Агент запускается"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Starting Agent"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent启动中"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent啟動中"
}
}
}
},
"agent_details_version_title" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Versió"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Version"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Έκδοση"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Versio"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Version"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "バージョン"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "버전"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Wersja"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Versão"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Версия"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Version"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "版本"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "版本"
}
}
}
},
"agent_not_running_notice_detail_description" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "L'agent segur (SecretAgent) és un procés que funciona en rerefons per signar peticions, tal que no hages de tindre Secretive obert tot el temps.\n\n**Secretive no funcionarà correctament a menys que l'agent estiga instal·lat i en funcionament.**"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent ist ein Hintergrund-Prozess, der Anfragen signiert, sodass Du Secretive nicht durchgehend geöffnet haben musst.\n\n**Secretive wird nicht richtig funktionieren, wenn der Agent nicht installiert und ausgeführt wird.**"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Το SecretAgent είναι μια διεργασία που εκτελείται στο παρασκήνιο για να υπογράφει αιτήματα. Δεν χρειάζεται να κρατάτε παράθυρο του Secretive ανοιχτό συνεχώς.\n\n**Το Secretive δεν θα μπορεί να λειτουργήσει σωστά εκτός και αν o Agent είναι εγκατεστημένος και εκτελείται.**"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent-agenttiprosessi toimii taustalla ja allekirjoittaa pyyntöjä, jotta Secretive-käyttöliittymää ei tarvitse pitää aina auki.\n\n**Secretive ei toimi oikein, jollei agentti ole asennettu ja käynnissä.**"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent est un processus qui s'exécute en arrière-plan pour signer les demandes, de sorte que vous n'ayez pas besoin de garder Secretive ouvert en permanence.\n\n**Secretive ne pourra pas fonctionner correctement sans que l'agent soit installé et fonctionne.**"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgentはバックグラウンドで稼働し署名を行います。Secretiveアプリを常に実行する必要はありません。\n\n**Secretiveアプリはエージェントがインストールされて稼働しない限り正しく動作しません。**"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent는 백그라운드에서 실행되어 요청에 서명하는 프로세스이므로 Secretive를 항상 열어 둘 필요는 없습니다.\n\n**Secretive 에이전트가 설치되어 실행 중이어야 Secretive가 제대로 작동합니다.**"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent to proces działający w tle, który podpisuje żądania, dzięki czemu nie musisz mieć otwartego programu Secretive przez cały czas.\n\n**Program Secretive nie będzie działał poprawnie, jeśli agent nie zostanie zainstalowany i uruchomiony.**"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent é um processo que é executado em segundo plano para assinar pedidos, então não há necessidade de manter Secretive aberto o tempo todo.\n\n**Secretive não funcionará corretamente a menos que o agente esteja instalado e executando.**"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent это процесс, который работает в фоне чтобы подписывать запросы. Так Вам не придется все время держать Secretive открытым.\n\n**Secretive не сможет нормально функционировать, пока агент не установлен и не запущен.**"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**Secretive will not be able to function properly unless the agent is installed and running.**"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent是个在后台处理签名请求的进程,让您无需将Secretive一直保持在前台。\n\n**需要安装并运行Agent,否则Secretive无法正常工作。**"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent是個在後台處理簽名請求的行程,讓您無需將Secretive一直保持在前台。\n\n**需要安裝並執行Agent,否則Secretive無法正常工作。**"
}
}
}
},
"agent_not_running_notice_title" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent inactiu"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent wird Nicht Ausgeführt"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ο Agent Δεν Εκτελείται"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agentti ei ole käynnissä"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "L'agent n'est pas actif"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent non è in esecuzione"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "エージェントが稼働していません"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent가 실행되고 있지 않음"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent nie jest uruchomiony"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent não está rodando"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Агент не запущен"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent Is Not Running"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent尚未运行"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent尚未執行"
}
}
}
},
"agent_running_notice_detail_description" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent és un procés que s'executa en segon pla per signar peticions, per tal que no necessites tindre Secretive obert tot el temps.\n\n**Pots tancar Secretive, i tot continuarà funcionant.**"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent ist ein Prozess, der im Hintergrund läuft, um Anfragen zu signieren, so dass du Secretive nicht durchgehend geöffnet halten musst.\n\n**Du kannst Secretive schließen, und alles funktioniert weiter.**"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Το SecretAgent είναι μια διεργασία που εκτελείται στο παρασκήνιο για να υπογράφει αιτήματα. Δεν χρειάζεται να κρατάτε παράθυρο του Secretive ανοιχτό συνεχώς.\n\n**Το Secretive δεν θα μπορεί να λειτουργήσει σωστά εκτός και αν o Agent είναι εγκατεστημένος και εκτελείται.**"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent on taustaprosessi joka allekirjoittaa pyyntöjä, joten Secretiveä ei tarvitse pitää käynnissä koko aikaa.
**Voit sulkea Secretiven, ja kaikki toimii yhä.**"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent est un processus qui s'exécute en arrière-plan pour signer les demandes, de sorte que vous n'ayez pas besoin de garder Secretive ouvert en permanence.\n\n**Vous pouvez fermer Secretive, et tout continuera à fonctionner.**"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent è un processo che viene eseguito in background per firmare le richieste, così che non devi tenere aperto Secretive tutto il tempo.\n\n**Puoi chiudere Secretive, e continuerà a funzionare.**"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgentはバックグラウンドで稼働し署名を行います。Secretiveアプリを常に実行する必要はありません。\n\n**Secretiveアプリは終了しても問題ありません。アプリは機能し続けます。**"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent는 요청에 서명하기 위해 백그라운드에서 실행되는 프로세스이므로 Secretive를 항상 열어 둘 필요가 없습니다.\n\n**Secretive를 닫아도 모든 것이 계속 작동합니다.**"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent to proces, który działa w tle, aby popisywać zapytania. Dzięki temu nie musisz mieć uruchomionej aplikacji Secretive cały czas."
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent é um processo que roda em background para assinar requisições para que você não precise manter o Secretive aberto a todo momento.\n\n**Você pode fechar o Secretive e tudo continuará funcionando.**"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent это процесс, который работает в фоне, чтобы подписывать запросы – так Вам не нужно держать Secretive открытым все время.\n\n**Вы можете закрыть Secretive, и все продолжит работать штатно.**"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "SecretAgent is a process that runs in the background to sign requests, so you don't need to keep Secretive open all the time.\n\n**You can close Secretive, and everything will still keep working.**"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent是个在后台处理签名请求的进程,让您无需将Secretive一直保持在前台。\n\n**您可以关闭Secretive,所有服务都将正常运行。**"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent是個在後台處理簽名請求的行程,讓您無需將Secretive一直保持在前台。\n\n**您可以關閉Secretive,所有服務都將正常執行。**"
}
}
}
},
"agent_running_notice_detail_title" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "L'agent secret està actiu"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent wird Ausgeführt"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ο Πράκτορας εκτελείται"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent on käynnissä"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent est actif"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent è in esecuzione"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "エージェントは稼働中"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent가 실행 중입니다."
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent jest uruchomiony"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent está rodando"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent запущен"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent is Running"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent运行中"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent執行中"
}
}
}
},
"agent_running_notice_title" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent actiu"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent wird Ausgeführt"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agentti on käynnissä"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "L'agent est actif"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent è in esecuzione"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "エージェントは稼働中"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent가 실행중"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent jest uruchomiony"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent está rodando"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Агент запущен"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Agent is Running"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent运行中"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Agent執行中"
}
}
}
},
"agentDetailsLocationTitle" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ubicació de l'agent"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgent-Pfad"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Τοποθεσία Secret Agent"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "SecretAgentin sijainti"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Emplacement du SecretAgent"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "エージェントの場所"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent 경로"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Lokalizacja Secret Agent"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Localização do SecretAgent"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Расположение Secret Agent"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Secret Agent Location"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent的位置"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret Agent的位置"
}
}
}
},
"app_menu_help_button" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ajuda"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Hilfe"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Apua"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Aide"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Aiuto"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "ヘルプ"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "도움말"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Pomoc"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ajuda"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Помощь"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Help"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "帮助"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "幫助"
}
}
}
},
"app_menu_new_secret_button" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Nou secret"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Neues Secret"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Uusi salaisuus"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Nouveau Secret"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Nuovo Segreto"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "新規シークレット"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "새 비밀"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Nowy sekret"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Novo Segredo"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Новый секрет"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "New Secret"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "新密钥串"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "新建Secret"
}
}
}
},
"app_not_in_applications_notice_cancel_button" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"ca" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"de" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Εφαρμογή αργότερα"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"fi" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Plus tard"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "後にする"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "나중에"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"pl" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Позже"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Later"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "稍后"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "稍後"
}
}
}
},
"app_not_in_applications_notice_detail_description" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive necessita estar a la carpeta Apps per funcionar correctament. Per favor mogueu-lo i reobriu."
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive muss sich in deinem Programme Ordner befinden, damit es richtig funktioniert. Bitte verschiebe die App und starten sie neu."
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretiven tulee olla Ohjelmat-kansiossa toimiakseen oikein. Ole hyvä ja käynnistä se uudelleen siirrettyäsi sen."
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive doit se trouver dans votre dossier Applications pour fonctionner correctement. Veuillez le déplacer et relancer."
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive deve trovarsi nella cartella delle Applicazioni per funzionare correttamente. Per favore spostala e riavvia."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretiveは正しく動作するためにアプリケーションフォルダにある必要があります。アプリを移動して再度実行してください。"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive가 제대로 작동하려면 Applications 폴더에 있어야 합니다. 이동한 후 다시 실행해 주세요."
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive musi być w katalogu Applications, aby działać prawidłowo. Zmień lokalizację aplikacji i uruchom ją ponownie."
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive necessita estar no seu diretório de Aplicações para funcionar corretamente. Por favor mova-o e abra novamente."
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive должен находиться в папке Applications чтобы работать правильно. Пожалуйста, переместите его и перезапустите приложение."
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive needs to be in your Applications folder to work properly. Please move it and relaunch."
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive需要在“应用程序”文件夹中才能正常运行。请移动并重新启动Secretive。"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive需要在「應用程式」資料夾中才能正常執行。請移動並重新啟動Secretive。"
}
}
}
},
"app_not_in_applications_notice_quit_button" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"ca" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"de" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"el" : {
"stringUnit" : {
"state" : "translated",
"value" : "Έξοδος"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"fi" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Quitter"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"it" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "終了"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "종료"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"pl" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Выйти"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Quit"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "退出"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "退出"
}
}
}
},
"app_not_in_applications_notice_title" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive no es troba a la carpeta Apps"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive ist Nicht im Programme Ordner"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive ei ole Ohjelmat-kansiossa"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive n'est pas dans le dossier Applications"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive non è nella cartella delle Applicazioni"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretiveがアプリケーションフォルダにありません"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive가 Applications 폴더에 없음"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive nie jest w folderze Applications"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive não está no diretório de Aplicações"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive находится не в папке Applications"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Secretive Is Not in Applications Folder"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive不在“应用程序”文件夹中"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secretive不在「應用程式」資料夾中"
}
}
}
},
"auth_context_persist_for_duration" : {
"comment" : "When the user clicks the notification to leave a secret unlocked, they are shown a prompt to approve the action. This is the description, showing which secret will used. The first placeholder is the name of the secret. The second placeholder is a localized description of the time period it will remain unlocked for (eg: “five minutes”)",
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "desbloqueja el secret “%1$(secretName)@” per a %2$(duration)@"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Secret “%1$(secretName)@” für %2$(duration)@ entsperren"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "avaa salaisuuden “%1$(secretName)@” lukitus ajaksi %2$(duration)@"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "déverrouiller le secret “%1$(secretName)@” pendant %2$(duration)@"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "sblocca il Segreto “%1$(secretName)@” per %2$(duration)@"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "シークレット“%1$(secretName)@”のロックを解除します (%2$(duration)@間)"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "비밀 “%1$(secretName)@”를 %2$(duration)@ 동안 잠금 해제"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "odblokuj sekret “%1$(secretName)@” dla %2$(duration)@"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "destravar segredo “%1$(secretName)@” for %2$(duration)@"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "разблокировать секрет “%1$(secretName)@” на %2$(duration)@"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "unlock secret “%1$(secretName)@” for %2$(duration)@"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "解锁密钥串“%1$(secretName)@”%2$(duration)@"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "解鎖Secret「%1$(secretName)@」%2$(duration)@"
}
}
}
},
"auth_context_request_deny_button" : {
"comment" : "When the user chooses to perform an action that requires Touch ID/password authentication, they are shown a prompt to approve the action. This is the deny button for that prompt.",
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Denega"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ablehnen"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Kiellä"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Refuser"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Nega"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "拒否"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "거부"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Odrzuć"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Negar"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Отказать"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Deny"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "拒绝"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "拒絕"
}
}
}
},
"auth_context_request_signature_description" : {
"comment" : "When the user performs a signature action using a secret, they are shown a prompt to approve the action. This is the description, showing which secret will be used, and where the request is coming from. The first placeholder is the name of the app requesting the operation. The second placeholder is the name of the secret.",
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "signa una petición de “%1$(appName)@” usant el secret “%2$(secretName)@”"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "eine Anfrage von “%1$(appName)@” mit dem Secret “%2$(secretName)@” signieren"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "allekirjoita pyyntö lähteestä “%1$(appName)@” käyttäen salaisuutta “%2$(secretName)@”"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "signer une requête de “%1$(appName)@” en utilisant le secret “%2$(secretName)@”"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "firma la richiesta di “%1$(appName)@” usando il Segreto “%2$(secretName)@”"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "シークレット“%2$(secretName)@”を使って“%1$(appName)@”の要求に署名します"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "비밀 “%2$(secretName)@”를 사용해서 “%1$(appName)@”의 요청에 서명"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "podpisz zapytanie od “%1$(appName)@” za pomocą sekretu “%2$(secretName)@”"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "assinar requisição a partir do “%1$(appName)@” utilizando o segredo “%2$(secretName)@”"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "подписать запрос от “%1$(appName)@” используя секрет “%2$(secretName)@”"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "sign a request from “%1$(appName)@” using secret “%2$(secretName)@”"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "用密钥串“%2$(secretName)@”认证来自“%1$(appName)@”的请求"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "用Secret「%2$(secretName)@」認證来自「%1$(appName)@」的请求"
}
}
}
},
"copyable_click_to_copy_button" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Clica per copiar"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Zum Kopieren Anklicken"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Klikkaa kopioidaksesi"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Cliquer pour copier"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Clicca per copiare"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "クリックしてコピー"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "복사하기"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Kliknij aby skopiować"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Clique para Copiar"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Кликните чтобы скопировать"
}
},
"sr" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"sv" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"tr" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"uk" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"vi" : {
"stringUnit" : {
"state" : "new",
"value" : "Click to Copy"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "点击拷贝"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "點選以拷貝"
}
}
}
},
"copyable_copied" : {
"extractionState" : "manual",
"localizations" : {
"af" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"ar" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"ca" : {
"stringUnit" : {
"state" : "translated",
"value" : "Copiat"
}
},
"cs" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"da" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Kopiert"
}
},
"el" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"es" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"fi" : {
"stringUnit" : {
"state" : "translated",
"value" : "Kopioitu"
}
},
"fr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Copié"
}
},
"he" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"hu" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"it" : {
"stringUnit" : {
"state" : "translated",
"value" : "Copiato"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "コピーしました"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
"value" : "복사됨"
}
},
"nb" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"nl" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"pl" : {
"stringUnit" : {
"state" : "translated",
"value" : "Skopiowano"
}
},
"pt" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"pt-BR" : {
"stringUnit" : {
"state" : "translated",
"value" : "Copiado"
}
},
"ro" : {
"stringUnit" : {
"state" : "new",
"value" : "Copied"
}
},
"ru" : {
"stringUnit" : {
"state" : "translated",
"value" : "Скопировано"
gitextract_rc6ccbze/ ├── .github/ │ ├── FUNDING.yml │ ├── scripts/ │ │ └── signing.sh │ ├── templates/ │ │ └── release.md │ └── workflows/ │ ├── codeql.yml │ ├── nightly.yml │ ├── oneoff.yml │ ├── release.yml │ └── test.yml ├── .gitignore ├── APP_CONFIG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Design/ │ └── DESIGN.md ├── FAQ.md ├── LICENSE ├── LOCALIZING.md ├── Package.swift ├── README.md ├── SECURITY.md ├── Sources/ │ ├── Config/ │ │ ├── Config.xcconfig │ │ └── Secretive.xctestplan │ ├── Packages/ │ │ ├── Package.swift │ │ ├── Resources/ │ │ │ └── Localizable.xcstrings │ │ ├── Sources/ │ │ │ ├── Brief/ │ │ │ │ ├── Documentation.docc/ │ │ │ │ │ └── Documentation.md │ │ │ │ ├── Release.swift │ │ │ │ ├── SemVer.swift │ │ │ │ ├── Updater.swift │ │ │ │ └── UpdaterProtocol.swift │ │ │ ├── Common/ │ │ │ │ ├── BundleIDs.swift │ │ │ │ └── URLs.swift │ │ │ ├── SSHProtocolKit/ │ │ │ │ ├── Data+Hex.swift │ │ │ │ ├── LengthAndData.swift │ │ │ │ ├── OpenSSHPublicKeyWriter.swift │ │ │ │ ├── OpenSSHReader.swift │ │ │ │ ├── OpenSSHSignatureWriter.swift │ │ │ │ └── SSHAgentProtocol.swift │ │ │ ├── SecretAgentKit/ │ │ │ │ ├── Agent.swift │ │ │ │ ├── Documentation.docc/ │ │ │ │ │ └── Documentation.md │ │ │ │ ├── FileHandleProtocols.swift │ │ │ │ ├── OpenSSHCertificateHandler.swift │ │ │ │ ├── PublicKeyStandinFileController.swift │ │ │ │ ├── SSHAgentInputParser.swift │ │ │ │ ├── SigningRequestTracer.swift │ │ │ │ ├── SigningWitness.swift │ │ │ │ └── SocketController.swift │ │ │ ├── SecretKit/ │ │ │ │ ├── Convenience/ │ │ │ │ │ └── PersistentAuthenticationHandler.swift │ │ │ │ ├── Documentation.docc/ │ │ │ │ │ └── Documentation.md │ │ │ │ ├── Erasers/ │ │ │ │ │ ├── AnySecret.swift │ │ │ │ │ └── AnySecretStore.swift │ │ │ │ ├── KeychainTypes.swift │ │ │ │ ├── SecretStoreList.swift │ │ │ │ └── Types/ │ │ │ │ ├── CreationOptions.swift │ │ │ │ ├── PersistedAuthenticationContext.swift │ │ │ │ ├── Secret.swift │ │ │ │ ├── SecretStore.swift │ │ │ │ └── SigningRequestProvenance.swift │ │ │ ├── SecureEnclaveSecretKit/ │ │ │ │ ├── CryptoKitMigrator.swift │ │ │ │ ├── Documentation.docc/ │ │ │ │ │ ├── Documentation.md │ │ │ │ │ └── SecureEnclave.md │ │ │ │ ├── SecureEnclave.swift │ │ │ │ ├── SecureEnclaveSecret.swift │ │ │ │ └── SecureEnclaveStore.swift │ │ │ ├── SmartCardSecretKit/ │ │ │ │ ├── Documentation.docc/ │ │ │ │ │ ├── Documentation.md │ │ │ │ │ └── SmartCard.md │ │ │ │ ├── SmartCard.swift │ │ │ │ ├── SmartCardSecret.swift │ │ │ │ └── SmartCardStore.swift │ │ │ └── XPCWrappers/ │ │ │ ├── TeamID.swift │ │ │ ├── XPCProtocol.swift │ │ │ ├── XPCServiceDelegate.swift │ │ │ └── XPCTypedSession.swift │ │ └── Tests/ │ │ ├── BriefTests/ │ │ │ ├── ReleaseParsingTests.swift │ │ │ └── SemVerTests.swift │ │ ├── SSHProtocolKitTests/ │ │ │ ├── OpenSSHPublicKeyWriterTests.swift │ │ │ ├── OpenSSHReaderTests.swift │ │ │ ├── OpenSSHSignatureWriterTests.swift │ │ │ └── TestSecret.swift │ │ ├── SecretAgentKitTests/ │ │ │ ├── AgentTests.swift │ │ │ ├── StubStore.swift │ │ │ └── StubWitness.swift │ │ └── SecretKitTests/ │ │ └── AnySecretTests.swift │ ├── SecretAgent/ │ │ ├── AppDelegate.swift │ │ ├── Info.plist │ │ ├── InternetAccessPolicy.plist │ │ ├── Notifier.swift │ │ ├── Preview Content/ │ │ │ └── Preview Assets.xcassets/ │ │ │ └── Contents.json │ │ ├── SecretAgent.entitlements │ │ ├── XPCInputParser.swift │ │ └── en.lproj/ │ │ └── Main.storyboard │ ├── SecretAgentInputParser/ │ │ ├── Info.plist │ │ ├── SecretAgentInputParser.entitlements │ │ ├── SecretAgentInputParser.swift │ │ └── main.swift │ ├── Secretive/ │ │ ├── App.swift │ │ ├── AppIcon.icon/ │ │ │ └── icon.json │ │ ├── Controllers/ │ │ │ ├── AgentStatusChecker.swift │ │ │ ├── ApplicationDirectoryController.swift │ │ │ └── JustUpdatedChecker.swift │ │ ├── Info.plist │ │ ├── InternetAccessPolicy.plist │ │ ├── Preview Content/ │ │ │ ├── Preview Assets.xcassets/ │ │ │ │ └── Contents.json │ │ │ ├── PreviewAgentStatusChecker.swift │ │ │ ├── PreviewStore.swift │ │ │ └── PreviewUpdater.swift │ │ ├── Secretive.entitlements │ │ └── Views/ │ │ ├── Configuration/ │ │ │ ├── ConfigurationItemView.swift │ │ │ ├── GettingStartedView.swift │ │ │ ├── Instructions.swift │ │ │ ├── IntegrationsView.swift │ │ │ ├── SetupView.swift │ │ │ └── ToolConfigurationView.swift │ │ ├── Modifiers/ │ │ │ ├── ActionButtonStyle.swift │ │ │ ├── BoxBackgroundStyle.swift │ │ │ ├── ErrorStyle.swift │ │ │ ├── ToolbarButtonStyle.swift │ │ │ └── WindowBackgroundStyle.swift │ │ ├── Secrets/ │ │ │ ├── CreateSecretView.swift │ │ │ ├── DeleteSecretView.swift │ │ │ ├── EditSecretView.swift │ │ │ ├── EmptyStoreView.swift │ │ │ ├── NoStoresView.swift │ │ │ ├── SecretDetailView.swift │ │ │ ├── SecretListItemView.swift │ │ │ └── StoreListView.swift │ │ └── Views/ │ │ ├── AboutView.swift │ │ ├── AgentStatusView.swift │ │ ├── ContentView.swift │ │ ├── CopyableView.swift │ │ └── UpdateView.swift │ ├── Secretive.xcodeproj/ │ │ ├── project.pbxproj │ │ ├── project.xcworkspace/ │ │ │ └── xcshareddata/ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcshareddata/ │ │ └── xcschemes/ │ │ ├── PackageTests.xcscheme │ │ ├── SecretAgent.xcscheme │ │ └── Secretive.xcscheme │ └── SecretiveUpdater/ │ ├── Info.plist │ ├── InternetAccessPolicy.plist │ ├── SecretiveUpdater.entitlements │ ├── SecretiveUpdater.swift │ └── main.swift └── configure_team_id.sh
Condensed preview — 141 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,272K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 19,
"preview": "github: maxgoedjen\n"
},
{
"path": ".github/scripts/signing.sh",
"chars": 1066,
"preview": "#!/bin/bash\n\n# Import certificate and private key\necho $SIGNING_DATA | base64 -d -o Signing.p12\nsecurity create-keychain"
},
{
"path": ".github/templates/release.md",
"chars": 225,
"preview": "Update description\n\n## Features\n\n\n## Fixes\n\n\n## Minimum macOS Version\n\n\n## Build\nhttps://github.com/maxgoedjen/secretive"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 1349,
"preview": "name: \"CodeQL Advanced\"\n\non:\n push:\n branches: [ \"main\" ]\n pull_request:\n branches: [ \"main\" ]\n schedule:\n -"
},
{
"path": ".github/workflows/nightly.yml",
"chars": 2581,
"preview": "name: Nightly\n\non: \n schedule: \n - cron: \"0 8 * * *\"\n \njobs:\n build:\n runs-on: macos-26\n permissions:\n "
},
{
"path": ".github/workflows/oneoff.yml",
"chars": 2570,
"preview": "name: One-Off Build\n\non: \n workflow_dispatch:\n \njobs:\n build:\n runs-on: macos-26\n permissions:\n id-token: "
},
{
"path": ".github/workflows/release.yml",
"chars": 3998,
"preview": "name: Release\n\non: \n push:\n tags:\n - '*'\njobs:\n test:\n permissions:\n contents: read\n runs-on: mac"
},
{
"path": ".github/workflows/test.yml",
"chars": 623,
"preview": "name: Test\n\non: [push, pull_request]\njobs:\n test:\n permissions:\n contents: read\n runs-on: macos-26\n tim"
},
{
"path": ".gitignore",
"chars": 2304,
"preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
},
{
"path": "APP_CONFIG.md",
"chars": 172,
"preview": "# App Configuration\n\nInstructions for setting up apps and shells has moved to [secretive-config-instructions](https://gi"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3353,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 1847,
"preview": "# Contributing to Secretive\n\nThanks for your interest in contributing to Secretive! Before you contribute, there are a f"
},
{
"path": "Design/DESIGN.md",
"chars": 152,
"preview": "# Design\n\nThe art assets for the App Icon and GitHub image are located on [Sketch Cloud](https://www.sketch.com/s/574333"
},
{
"path": "FAQ.md",
"chars": 4380,
"preview": "# FAQ\n\n### How do I import my current SSH keys, or export my Secretive Keys?\n\nThe secure enclave doesn't allow import or"
},
{
"path": "LICENSE",
"chars": 1068,
"preview": "MIT License\n\nCopyright (c) 2020 Max Goedjen\n\nPermission is hereby granted, free of charge, to any person obtaining a cop"
},
{
"path": "LOCALIZING.md",
"chars": 1322,
"preview": "# Localizing Secretive\n\nIf you speak another language, and would like to help translate Secretive to support that langua"
},
{
"path": "Package.swift",
"chars": 2754,
"preview": "// swift-tools-version:6.2\n// The swift-tools-version declares the minimum version of Swift required to build this packa"
},
{
"path": "README.md",
"chars": 3805,
"preview": "# Secretive [](https://"
},
{
"path": "SECURITY.md",
"chars": 1519,
"preview": "# Security Policy\n\n## Security Principles\n\nSecretive is designed with a few general tenets in mind:\n\n### It's Hard to Le"
},
{
"path": "Sources/Config/Config.xcconfig",
"chars": 310,
"preview": "CI_VERSION = GITHUB_CI_VERSION\nCI_BUILD_NUMBER = GITHUB_BUILD_NUMBER\nCI_BUILD_LINK = GITHUB_BUILD_URL\n\n#include? \"OpenSo"
},
{
"path": "Sources/Config/Secretive.xctestplan",
"chars": 720,
"preview": "{\n \"configurations\" : [\n {\n \"id\" : \"5896AE5A-6D5A-48D3-837B-668B646A3273\",\n \"name\" : \"Configuration 1\",\n "
},
{
"path": "Sources/Packages/Package.swift",
"chars": 3403,
"preview": "// swift-tools-version:6.2\n// The swift-tools-version declares the minimum version of Swift required to build this packa"
},
{
"path": "Sources/Packages/Resources/Localizable.xcstrings",
"chars": 712402,
"preview": "{\n \"sourceLanguage\" : \"en\",\n \"strings\" : {\n \"\" : {\n \"localizations\" : {\n \"af\" : {\n \"stringUnit"
},
{
"path": "Sources/Packages/Sources/Brief/Documentation.docc/Documentation.md",
"chars": 200,
"preview": "# ``Brief``\n\nBrief is a collection of protocols and concrete implmentation describing updates.\n\n## Topics\n\n### Versionin"
},
{
"path": "Sources/Packages/Sources/Brief/Release.swift",
"chars": 4590,
"preview": "import Foundation\nimport SwiftUI\n\n/// A release is a representation of a downloadable update.\npublic struct Release: Cod"
},
{
"path": "Sources/Packages/Sources/Brief/SemVer.swift",
"chars": 1683,
"preview": "import Foundation\n\n/// A representation of a Semantic Version.\npublic struct SemVer: Sendable {\n\n /// The SemVer brok"
},
{
"path": "Sources/Packages/Sources/Brief/Updater.swift",
"chars": 3842,
"preview": "import Foundation\nimport Observation\nimport XPCWrappers\n\n/// A concrete implementation of ``UpdaterProtocol`` which cons"
},
{
"path": "Sources/Packages/Sources/Brief/UpdaterProtocol.swift",
"chars": 300,
"preview": "import Foundation\n\n/// A protocol for retreiving the latest available version of an app.\npublic protocol UpdaterProtocol"
},
{
"path": "Sources/Packages/Sources/Common/BundleIDs.swift",
"chars": 328,
"preview": "import Foundation\n\nextension Bundle {\n public static var agentBundleID: String {\n Bundle.main.bundleIdentifier"
},
{
"path": "Sources/Packages/Sources/Common/URLs.swift",
"chars": 1711,
"preview": "import Foundation\nimport SSHProtocolKit\nimport SecretKit\n\nextension URL {\n\n public static var agentHomeURL: URL {\n "
},
{
"path": "Sources/Packages/Sources/SSHProtocolKit/Data+Hex.swift",
"chars": 902,
"preview": "import Foundation\nimport CryptoKit\n\npublic struct HexDataStyle<SequenceType: Sequence>: Hashable, Codable {\n\n let sep"
},
{
"path": "Sources/Packages/Sources/SSHProtocolKit/LengthAndData.swift",
"chars": 638,
"preview": "import Foundation\n\nextension Data {\n\n /// Creates an OpenSSH protocol style data object, which has a length header, f"
},
{
"path": "Sources/Packages/Sources/SSHProtocolKit/OpenSSHPublicKeyWriter.swift",
"chars": 4550,
"preview": "import Foundation\nimport CryptoKit\nimport SecretKit\n\n/// Generates OpenSSH representations of the public key sof secrets"
},
{
"path": "Sources/Packages/Sources/SSHProtocolKit/OpenSSHReader.swift",
"chars": 1959,
"preview": "import Foundation\n\n/// Reads OpenSSH protocol data.\npublic final class OpenSSHReader {\n\n var remaining: Data\n var "
},
{
"path": "Sources/Packages/Sources/SSHProtocolKit/OpenSSHSignatureWriter.swift",
"chars": 3137,
"preview": "import Foundation\nimport CryptoKit\nimport SecretKit\n\n/// Generates OpenSSH representations of Secrets.\npublic struct Ope"
},
{
"path": "Sources/Packages/Sources/SSHProtocolKit/SSHAgentProtocol.swift",
"chars": 3682,
"preview": "import Foundation\n\n/// A namespace for the SSH Agent Protocol, as described in https://datatracker.ietf.org/doc/html/dra"
},
{
"path": "Sources/Packages/Sources/SecretAgentKit/Agent.swift",
"chars": 6351,
"preview": "import Foundation\nimport CryptoKit\nimport OSLog\nimport SecretKit\nimport AppKit\nimport SSHProtocolKit\n\n/// The `Agent` is"
},
{
"path": "Sources/Packages/Sources/SecretAgentKit/Documentation.docc/Documentation.md",
"chars": 329,
"preview": "# ``SecretAgentKit``\n\nSecretAgentKit is a collection of types that allow SecretAgent to conform to the SSH agent protoco"
},
{
"path": "Sources/Packages/Sources/SecretAgentKit/FileHandleProtocols.swift",
"chars": 403,
"preview": "import Foundation\n\nextension FileHandle {\n\n public var pidOfConnectedProcess: Int32 {\n let pidPointer = Unsafe"
},
{
"path": "Sources/Packages/Sources/SecretAgentKit/OpenSSHCertificateHandler.swift",
"chars": 3743,
"preview": "import Foundation\nimport OSLog\nimport SecretKit\nimport SSHProtocolKit\n\n/// Manages storage and lookup for OpenSSH certif"
},
{
"path": "Sources/Packages/Sources/SecretAgentKit/PublicKeyStandinFileController.swift",
"chars": 3151,
"preview": "import Foundation\nimport OSLog\nimport SecretKit\nimport SSHProtocolKit\nimport Common\n\n/// Controller responsible for writ"
},
{
"path": "Sources/Packages/Sources/SecretAgentKit/SSHAgentInputParser.swift",
"chars": 3932,
"preview": "import Foundation\nimport OSLog\nimport SecretKit\nimport SSHProtocolKit\n\npublic protocol SSHAgentInputParserProtocol {\n\n "
},
{
"path": "Sources/Packages/Sources/SecretAgentKit/SigningRequestTracer.swift",
"chars": 4490,
"preview": "import Foundation\nimport AppKit\nimport Security\nimport SecretKit\n\n/// An object responsible for generating ``SecretKit.S"
},
{
"path": "Sources/Packages/Sources/SecretAgentKit/SigningWitness.swift",
"chars": 1563,
"preview": "import Foundation\nimport SecretKit\n\n/// A protocol that allows conformers to be notified of access to secrets, and optio"
},
{
"path": "Sources/Packages/Sources/SecretAgentKit/SocketController.swift",
"chars": 6136,
"preview": "import Foundation\nimport OSLog\nimport SecretKit\n\n/// A controller that manages socket configuration and request dispatch"
},
{
"path": "Sources/Packages/Sources/SecretKit/Convenience/PersistentAuthenticationHandler.swift",
"chars": 3230,
"preview": "import LocalAuthentication\n\n/// A context describing a persisted authentication.\npackage final class PersistentAuthentic"
},
{
"path": "Sources/Packages/Sources/SecretKit/Documentation.docc/Documentation.md",
"chars": 563,
"preview": "# ``SecretKit``\n\nSecretKit is a collection of protocols describing secrets and stores.\n\n## Topics\n\n### Base Protocols\n\n-"
},
{
"path": "Sources/Packages/Sources/SecretKit/Erasers/AnySecret.swift",
"chars": 1356,
"preview": "import Foundation\n\n/// Type eraser for Secret.\npublic struct AnySecret: Secret, @unchecked Sendable {\n\n public let ba"
},
{
"path": "Sources/Packages/Sources/SecretKit/Erasers/AnySecretStore.swift",
"chars": 3904,
"preview": "import Foundation\n\n/// Type eraser for SecretStore.\nopen class AnySecretStore: SecretStore, @unchecked Sendable {\n\n l"
},
{
"path": "Sources/Packages/Sources/SecretKit/KeychainTypes.swift",
"chars": 2287,
"preview": "import Foundation\n\npublic typealias SecurityError = Unmanaged<CFError>\n\n/// Wraps a Swift dictionary in a CFDictionary.\n"
},
{
"path": "Sources/Packages/Sources/SecretKit/SecretStoreList.swift",
"chars": 1420,
"preview": "import Foundation\nimport Observation\n\n/// A \"Store Store,\" which holds a list of type-erased stores.\n@Observable @MainAc"
},
{
"path": "Sources/Packages/Sources/SecretKit/Types/CreationOptions.swift",
"chars": 2068,
"preview": "import Foundation\n\npublic struct Attributes: Sendable, Codable, Hashable {\n \n /// The type of key involved.\n pu"
},
{
"path": "Sources/Packages/Sources/SecretKit/Types/PersistedAuthenticationContext.swift",
"chars": 465,
"preview": "import Foundation\n\n/// Protocol describing a persisted authentication context. This is an authorization that can be reus"
},
{
"path": "Sources/Packages/Sources/SecretKit/Types/Secret.swift",
"chars": 2404,
"preview": "import Foundation\n\n/// The base protocol for describing a Secret\npublic protocol Secret: Identifiable, Hashable, Sendabl"
},
{
"path": "Sources/Packages/Sources/SecretKit/Types/SecretStore.swift",
"chars": 4137,
"preview": "import Foundation\n\n/// Manages access to Secrets, and performs signature operations on data using those Secrets.\npublic "
},
{
"path": "Sources/Packages/Sources/SecretKit/Types/SigningRequestProvenance.swift",
"chars": 2831,
"preview": "import Foundation\nimport AppKit\n\n/// Describes the chain of applications that requested a signature operation.\npublic st"
},
{
"path": "Sources/Packages/Sources/SecureEnclaveSecretKit/CryptoKitMigrator.swift",
"chars": 5083,
"preview": "import Foundation\nimport Security\nimport CryptoTokenKit\nimport CryptoKit\nimport SecretKit\nimport os\n\nextension SecureEnc"
},
{
"path": "Sources/Packages/Sources/SecureEnclaveSecretKit/Documentation.docc/Documentation.md",
"chars": 131,
"preview": "# ``SecureEnclaveSecretKit``\n\nSecureEnclaveSecretKit contains implementations of SecretKit protocols backed by the Secur"
},
{
"path": "Sources/Packages/Sources/SecureEnclaveSecretKit/Documentation.docc/SecureEnclave.md",
"chars": 173,
"preview": "# ``SecureEnclaveSecretKit/SecureEnclave``\n\n## Topics\n\n### Implementations\n\n- ``Secret``\n- ``Store``\n\n### Errors\n\n- ``Ke"
},
{
"path": "Sources/Packages/Sources/SecureEnclaveSecretKit/SecureEnclave.swift",
"chars": 83,
"preview": "/// Namespace for the Secure Enclave implementations.\npublic enum SecureEnclave {}\n"
},
{
"path": "Sources/Packages/Sources/SecureEnclaveSecretKit/SecureEnclaveSecret.swift",
"chars": 711,
"preview": "import Foundation\nimport SecretKit\n\nextension SecureEnclave {\n\n /// An implementation of Secret backed by the Secure "
},
{
"path": "Sources/Packages/Sources/SecureEnclaveSecretKit/SecureEnclaveStore.swift",
"chars": 13062,
"preview": "import Foundation\nimport Observation\nimport Security\nimport CryptoKit\nimport LocalAuthentication\nimport SecretKit\nimport"
},
{
"path": "Sources/Packages/Sources/SmartCardSecretKit/Documentation.docc/Documentation.md",
"chars": 117,
"preview": "# ``SmartCardSecretKit``\n\nSmartCardSecretKit contains implementations of SecretKit protocols backed by a Smart Card.\n"
},
{
"path": "Sources/Packages/Sources/SmartCardSecretKit/Documentation.docc/SmartCard.md",
"chars": 93,
"preview": "# ``SmartCardSecretKit/SmartCard``\n\n## Topics\n\n### Implementations\n\n- ``Secret``\n- ``Store``\n"
},
{
"path": "Sources/Packages/Sources/SmartCardSecretKit/SmartCard.swift",
"chars": 75,
"preview": "/// Namespace for the Smart Card implementations.\npublic enum SmartCard {}\n"
},
{
"path": "Sources/Packages/Sources/SmartCardSecretKit/SmartCardSecret.swift",
"chars": 312,
"preview": "import Foundation\nimport SecretKit\n\nextension SmartCard {\n\n /// An implementation of Secret backed by a Smart Card.\n "
},
{
"path": "Sources/Packages/Sources/SmartCardSecretKit/SmartCardStore.swift",
"chars": 7725,
"preview": "import Foundation\nimport Observation\nimport Security\n@unsafe @preconcurrency import CryptoTokenKit\nimport LocalAuthentic"
},
{
"path": "Sources/Packages/Sources/XPCWrappers/TeamID.swift",
"chars": 823,
"preview": "import Foundation\n\nextension ProcessInfo {\n private static let fallbackTeamID = \"Z72PRUAWF6\"\n\n private static let "
},
{
"path": "Sources/Packages/Sources/XPCWrappers/XPCProtocol.swift",
"chars": 334,
"preview": "import Foundation\n\n@objc protocol _XPCProtocol: Sendable {\n func process(_ data: Data, with reply: @Sendable @escapin"
},
{
"path": "Sources/Packages/Sources/XPCWrappers/XPCServiceDelegate.swift",
"chars": 2872,
"preview": "import Foundation\n\npublic final class XPCServiceDelegate: NSObject, NSXPCListenerDelegate {\n\n private let exportedObj"
},
{
"path": "Sources/Packages/Sources/XPCWrappers/XPCTypedSession.swift",
"chars": 1926,
"preview": "import Foundation\n\npublic struct XPCTypedSession<ResponseType: Codable & Sendable, ErrorType: Error & Codable>: ~Copyabl"
},
{
"path": "Sources/Packages/Tests/BriefTests/ReleaseParsingTests.swift",
"chars": 5654,
"preview": "import Testing\nimport Foundation\n@testable import Brief\n\n@Suite struct ReleaseParsingTests {\n\n @Test\n func nonCrit"
},
{
"path": "Sources/Packages/Tests/BriefTests/SemVerTests.swift",
"chars": 1203,
"preview": "import Testing\nimport Foundation\n@testable import Brief\n\n@Suite struct SemVerTests {\n\n @Test func equal() {\n l"
},
{
"path": "Sources/Packages/Tests/SSHProtocolKitTests/OpenSSHPublicKeyWriterTests.swift",
"chars": 3010,
"preview": "import Foundation\nimport Testing\n@testable import SecretKit\nimport SSHProtocolKit\n\n@Suite struct OpenSSHPublicKeyWriterT"
},
{
"path": "Sources/Packages/Tests/SSHProtocolKitTests/OpenSSHReaderTests.swift",
"chars": 1639,
"preview": "import Foundation\nimport Testing\nimport SSHProtocolKit\n\n@Suite struct OpenSSHReaderTests {\n\n @Test func signatureRequ"
},
{
"path": "Sources/Packages/Tests/SSHProtocolKitTests/OpenSSHSignatureWriterTests.swift",
"chars": 2949,
"preview": "import Foundation\nimport Testing\nimport SSHProtocolKit\n@testable import SecretKit\n\n@Suite struct OpenSSHSignatureWriterT"
},
{
"path": "Sources/Packages/Tests/SSHProtocolKitTests/TestSecret.swift",
"chars": 214,
"preview": "import Foundation\nimport SecretKit\n\npublic struct TestSecret: SecretKit.Secret {\n \n public let id: Data\n public"
},
{
"path": "Sources/Packages/Tests/SecretAgentKitTests/AgentTests.swift",
"chars": 9364,
"preview": "import Foundation\nimport Testing\nimport CryptoKit\n@testable import SSHProtocolKit\n@testable import SecretKit\n@testable i"
},
{
"path": "Sources/Packages/Tests/SecretAgentKitTests/StubStore.swift",
"chars": 3633,
"preview": "import Foundation\nimport SecretKit\nimport CryptoKit\nimport SSHProtocolKit\n\nstruct Stub {}\n\nextension Stub {\n\n public "
},
{
"path": "Sources/Packages/Tests/SecretAgentKitTests/StubWitness.swift",
"chars": 760,
"preview": "import SecretKit\nimport SecretAgentKit\n\nstruct StubWitness {\n\n let speakNow: @Sendable (AnySecret, SigningRequestProv"
},
{
"path": "Sources/Packages/Tests/SecretKitTests/AnySecretTests.swift",
"chars": 676,
"preview": "import Foundation\nimport Testing\n@testable import SecretKit\n@testable import SecureEnclaveSecretKit\n@testable import Sma"
},
{
"path": "Sources/SecretAgent/AppDelegate.swift",
"chars": 2723,
"preview": "import Cocoa\nimport OSLog\nimport SecretKit\nimport SecureEnclaveSecretKit\nimport SmartCardSecretKit\nimport SecretAgentKit"
},
{
"path": "Sources/SecretAgent/Info.plist",
"chars": 1206,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/SecretAgent/InternetAccessPolicy.plist",
"chars": 667,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/SecretAgent/Notifier.swift",
"chars": 11299,
"preview": "import Foundation\nimport UserNotifications\nimport AppKit\nimport SecretKit\nimport SecretAgentKit\nimport Brief\n\nfinal clas"
},
{
"path": "Sources/SecretAgent/Preview Content/Preview Assets.xcassets/Contents.json",
"chars": 63,
"preview": "{\n \"info\" : {\n \"author\" : \"xcode\",\n \"version\" : 1\n }\n}\n"
},
{
"path": "Sources/SecretAgent/SecretAgent.entitlements",
"chars": 1015,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/SecretAgent/XPCInputParser.swift",
"chars": 997,
"preview": "import Foundation\nimport SecretAgentKit\nimport Brief\nimport XPCWrappers\nimport OSLog\nimport SSHProtocolKit\n\n/// Delegate"
},
{
"path": "Sources/SecretAgent/en.lproj/Main.storyboard",
"chars": 58338,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" t"
},
{
"path": "Sources/SecretAgentInputParser/Info.plist",
"chars": 284,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/SecretAgentInputParser/SecretAgentInputParser.entitlements",
"chars": 845,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/SecretAgentInputParser/SecretAgentInputParser.swift",
"chars": 556,
"preview": "import Foundation\nimport OSLog\nimport XPCWrappers\nimport SecretAgentKit\nimport SSHProtocolKit\n\nfinal class SecretAgentIn"
},
{
"path": "Sources/SecretAgentInputParser/main.swift",
"chars": 200,
"preview": "import Foundation\nimport XPCWrappers\n\nlet delegate = XPCServiceDelegate(exportedObject: SecretAgentInputParser())\nlet li"
},
{
"path": "Sources/Secretive/App.swift",
"chars": 4800,
"preview": "import SwiftUI\nimport SecretKit\nimport SecureEnclaveSecretKit\nimport SmartCardSecretKit\nimport Brief\n\n@main\nstruct Secre"
},
{
"path": "Sources/Secretive/AppIcon.icon/icon.json",
"chars": 1267,
"preview": "{\n \"fill\" : {\n \"solid\" : \"srgb:0.00000,0.53333,1.00000,0.00000\"\n },\n \"groups\" : [\n {\n \"blur-material\" : 0."
},
{
"path": "Sources/Secretive/Controllers/AgentStatusChecker.swift",
"chars": 3591,
"preview": "import Foundation\nimport AppKit\nimport SecretKit\nimport Observation\nimport OSLog\nimport ServiceManagement\nimport Common\n"
},
{
"path": "Sources/Secretive/Controllers/ApplicationDirectoryController.swift",
"chars": 535,
"preview": "import Foundation\n\nstruct ApplicationDirectoryController {\n}\n\nextension ApplicationDirectoryController {\n\n var isInAp"
},
{
"path": "Sources/Secretive/Controllers/JustUpdatedChecker.swift",
"chars": 1591,
"preview": "import Foundation\nimport AppKit\n\n@MainActor protocol JustUpdatedCheckerProtocol: Observable {\n var justUpdatedBuild: "
},
{
"path": "Sources/Secretive/Info.plist",
"chars": 1203,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/Secretive/InternetAccessPolicy.plist",
"chars": 516,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/Secretive/Preview Content/Preview Assets.xcassets/Contents.json",
"chars": 62,
"preview": "{\n \"info\" : {\n \"version\" : 1,\n \"author\" : \"xcode\"\n }\n}"
},
{
"path": "Sources/Secretive/Preview Content/PreviewAgentStatusChecker.swift",
"chars": 494,
"preview": "import Foundation\nimport AppKit\n\nclass PreviewAgentLaunchController: AgentLaunchControllerProtocol {\n\n let running: B"
},
{
"path": "Sources/Secretive/Preview Content/PreviewStore.swift",
"chars": 3370,
"preview": "import Foundation\nimport SecretKit\n\nenum Preview {}\n\nextension Preview {\n\n struct Secret: SecretKit.Secret {\n\n "
},
{
"path": "Sources/Secretive/Preview Content/PreviewUpdater.swift",
"chars": 825,
"preview": "import Foundation\nimport Observation\nimport Brief\n\n@Observable @MainActor final class PreviewUpdater: UpdaterProtocol {\n"
},
{
"path": "Sources/Secretive/Secretive.entitlements",
"chars": 1015,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/Secretive/Views/Configuration/ConfigurationItemView.swift",
"chars": 1837,
"preview": "import SwiftUI\n\nstruct ConfigurationItemView<Content: View>: View {\n\n enum Action: Hashable {\n case copy(Strin"
},
{
"path": "Sources/Secretive/Views/Configuration/GettingStartedView.swift",
"chars": 1731,
"preview": "import SwiftUI\n\nstruct GettingStartedView: View {\n\n private let instructions = Instructions()\n\n @Binding var selec"
},
{
"path": "Sources/Secretive/Views/Configuration/Instructions.swift",
"chars": 5615,
"preview": "import Foundation\n\nstruct Instructions {\n\n enum Constants {\n static let publicKeyPathPlaceholder = \"_PUBLIC_KE"
},
{
"path": "Sources/Secretive/Views/Configuration/IntegrationsView.swift",
"chars": 2882,
"preview": "import SwiftUI\n\nstruct IntegrationsView: View {\n\n @Environment(\\.dismiss) private var dismiss\n\n @State private var"
},
{
"path": "Sources/Secretive/Views/Configuration/SetupView.swift",
"chars": 6402,
"preview": "import SwiftUI\n\nstruct SetupView: View {\n\n @Environment(\\.dismiss) private var dismiss\n @Environment(\\.agentLaunch"
},
{
"path": "Sources/Secretive/Views/Configuration/ToolConfigurationView.swift",
"chars": 5324,
"preview": "import SwiftUI\nimport SecretKit\nimport SSHProtocolKit\nimport Common\n\nstruct ToolConfigurationView: View {\n\n private l"
},
{
"path": "Sources/Secretive/Views/Modifiers/ActionButtonStyle.swift",
"chars": 2049,
"preview": "import SwiftUI\n\nstruct PrimaryButtonModifier: ViewModifier {\n\n @Environment(\\.colorScheme) var colorScheme\n @Envir"
},
{
"path": "Sources/Secretive/Views/Modifiers/BoxBackgroundStyle.swift",
"chars": 637,
"preview": "import SwiftUI\n\nstruct BoxBackgroundModifier: ViewModifier {\n\n let color: Color\n\n func body(content: Content) -> s"
},
{
"path": "Sources/Secretive/Views/Modifiers/ErrorStyle.swift",
"chars": 302,
"preview": "import SwiftUI\n\nstruct ErrorStyleModifier: ViewModifier {\n\n func body(content: Content) -> some View {\n conten"
},
{
"path": "Sources/Secretive/Views/Modifiers/ToolbarButtonStyle.swift",
"chars": 2793,
"preview": "import SwiftUI\n\nstruct ToolbarStatusButtonStyle: ButtonStyle {\n\n private let lightColor: Color\n private let darkCo"
},
{
"path": "Sources/Secretive/Views/Modifiers/WindowBackgroundStyle.swift",
"chars": 926,
"preview": "import SwiftUI\n\nstruct WindowBackgroundStyleModifier: ViewModifier {\n\n let shapeStyle: any ShapeStyle\n\n func body("
},
{
"path": "Sources/Secretive/Views/Secrets/CreateSecretView.swift",
"chars": 7135,
"preview": "import SwiftUI\nimport SecretKit\n\nstruct CreateSecretView<StoreType: SecretStoreModifiable>: View {\n\n @State var store"
},
{
"path": "Sources/Secretive/Views/Secrets/DeleteSecretView.swift",
"chars": 2066,
"preview": "import SwiftUI\nimport SecretKit\n\nextension View {\n\n func showingDeleteConfirmation(isPresented: Binding<Bool>, _ secr"
},
{
"path": "Sources/Secretive/Views/Secrets/EditSecretView.swift",
"chars": 2229,
"preview": "import SwiftUI\nimport SecretKit\n\nstruct EditSecretView<StoreType: SecretStoreModifiable>: View {\n\n let store: StoreTy"
},
{
"path": "Sources/Secretive/Views/Secrets/EmptyStoreView.swift",
"chars": 3120,
"preview": "import SwiftUI\nimport SecretKit\n\nstruct EmptyStoreView: View {\n\n @State var store: AnySecretStore?\n \n var body:"
},
{
"path": "Sources/Secretive/Views/Secrets/NoStoresView.swift",
"chars": 398,
"preview": "import SwiftUI\n\nstruct NoStoresView: View {\n\n var body: some View {\n VStack {\n Text(.noSecureStorag"
},
{
"path": "Sources/Secretive/Views/Secrets/SecretDetailView.swift",
"chars": 1511,
"preview": "import SwiftUI\nimport SecretKit\nimport Common\nimport SSHProtocolKit\n\nstruct SecretDetailView<SecretType: Secret>: View {"
},
{
"path": "Sources/Secretive/Views/Secrets/SecretListItemView.swift",
"chars": 1598,
"preview": "import SwiftUI\nimport SecretKit\n\nstruct SecretListItemView: View {\n \n @State var store: AnySecretStore\n var sec"
},
{
"path": "Sources/Secretive/Views/Secrets/StoreListView.swift",
"chars": 2204,
"preview": "import SwiftUI\nimport SecretKit\n\nstruct StoreListView: View {\n\n @Binding var activeSecret: AnySecret?\n\n @Environme"
},
{
"path": "Sources/Secretive/Views/Views/AboutView.swift",
"chars": 2125,
"preview": "import SwiftUI\n\nstruct AboutView: View {\n var body: some View {\n if #available(macOS 15.0, *) {\n Ab"
},
{
"path": "Sources/Secretive/Views/Views/AgentStatusView.swift",
"chars": 5423,
"preview": "import SwiftUI\n\nstruct AgentStatusView: View {\n\n @Environment(\\.agentLaunchController) private var agentLaunchControl"
},
{
"path": "Sources/Secretive/Views/Views/ContentView.swift",
"chars": 7073,
"preview": "import SwiftUI\nimport SecretKit\nimport SecureEnclaveSecretKit\nimport SmartCardSecretKit\nimport Brief\n\nstruct ContentView"
},
{
"path": "Sources/Secretive/Views/Views/CopyableView.swift",
"chars": 7140,
"preview": "import SwiftUI\nimport UniformTypeIdentifiers\n\nstruct CopyableView: View {\n\n var title: LocalizedStringResource\n va"
},
{
"path": "Sources/Secretive/Views/Views/UpdateView.swift",
"chars": 1818,
"preview": "import SwiftUI\nimport Brief\n\nstruct UpdateDetailView: View {\n\n @Environment(\\.updater) var updater\n @Environment(\\"
},
{
"path": "Sources/Secretive.xcodeproj/project.pbxproj",
"chars": 76491,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "Sources/Secretive.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/Secretive.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/Secretive.xcodeproj/xcshareddata/xcschemes/PackageTests.xcscheme",
"chars": 1573,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"2640\"\n version = \"1.7\">\n <BuildAction\n "
},
{
"path": "Sources/Secretive.xcodeproj/xcshareddata/xcschemes/SecretAgent.xcscheme",
"chars": 4375,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"2640\"\n version = \"1.7\">\n <BuildAction\n "
},
{
"path": "Sources/Secretive.xcodeproj/xcshareddata/xcschemes/Secretive.xcscheme",
"chars": 4397,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"2640\"\n version = \"1.7\">\n <BuildAction\n "
},
{
"path": "Sources/SecretiveUpdater/Info.plist",
"chars": 284,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/SecretiveUpdater/InternetAccessPolicy.plist",
"chars": 994,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/SecretiveUpdater/SecretiveUpdater.entitlements",
"chars": 845,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/SecretiveUpdater/SecretiveUpdater.swift",
"chars": 518,
"preview": "import Foundation\nimport OSLog\nimport XPCWrappers\nimport Brief\n\nfinal class SecretiveUpdater: NSObject, XPCProtocol {\n\n "
},
{
"path": "Sources/SecretiveUpdater/main.swift",
"chars": 194,
"preview": "import Foundation\nimport XPCWrappers\n\nlet delegate = XPCServiceDelegate(exportedObject: SecretiveUpdater())\nlet listener"
},
{
"path": "configure_team_id.sh",
"chars": 1618,
"preview": "#!/bin/bash\n\nTEAM_ID_FILE=Sources/Config/OpenSource.xcconfig\n\nfunction print_team_ids() {\n echo \"\"\n echo \"FYI, here ar"
}
]
About this extraction
This page contains the full source code of the maxgoedjen/secretive GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 141 files (1.1 MB), approximately 292.4k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.