mirror of
https://github.com/maxgoedjen/secretive.git
synced 2026-10-02 20:59:54 +02:00
Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45359b5960 | ||
|
|
70e32dcf99 | ||
|
|
e9a0ff31d3 | ||
|
|
8577e7cbc3 | ||
|
|
85ba5a1a37 | ||
|
|
039dddd107 |
@@ -11,7 +11,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze (${{ matrix.language }})
|
name: Analyze (${{ matrix.language }})
|
||||||
runs-on: ${{ (matrix.language == 'swift' && 'macos-26') || 'ubuntu-latest' }}
|
runs-on: ${{ (matrix.language == 'swift' && 'xcode-27') || 'ubuntu-latest' }}
|
||||||
permissions:
|
permissions:
|
||||||
security-events: write
|
security-events: write
|
||||||
packages: read
|
packages: read
|
||||||
@@ -24,20 +24,15 @@ jobs:
|
|||||||
include:
|
include:
|
||||||
- language: actions
|
- language: actions
|
||||||
build-mode: none
|
build-mode: none
|
||||||
# Disable this until CodeQL supports Xcode 26 builds.
|
|
||||||
# - language: swift
|
|
||||||
# build-mode: manual
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v3
|
uses: github/codeql-action/init@v3
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
build-mode: ${{ matrix.build-mode }}
|
build-mode: ${{ matrix.build-mode }}
|
||||||
- if: matrix.build-mode == 'manual'
|
- if: matrix.build-mode == 'manual'
|
||||||
name: "Select Xcode"
|
|
||||||
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
|
|
||||||
- if: matrix.build-mode == 'manual'
|
- if: matrix.build-mode == 'manual'
|
||||||
name: "Build"
|
name: "Build"
|
||||||
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme Secretive CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
|
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme Secretive CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: macos-26
|
runs-on: xcode-27
|
||||||
permissions:
|
permissions:
|
||||||
id-token: write
|
id-token: write
|
||||||
contents: write
|
contents: write
|
||||||
@@ -25,8 +25,6 @@ jobs:
|
|||||||
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
|
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
|
||||||
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
|
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
|
||||||
run: ./.github/scripts/signing.sh
|
run: ./.github/scripts/signing.sh
|
||||||
- name: Set Environment
|
|
||||||
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
|
|
||||||
- name: Update Build Number
|
- name: Update Build Number
|
||||||
env:
|
env:
|
||||||
RUN_ID: ${{ github.run_id }}
|
RUN_ID: ${{ github.run_id }}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: macos-26
|
runs-on: xcode-27
|
||||||
permissions:
|
permissions:
|
||||||
id-token: write
|
id-token: write
|
||||||
contents: write
|
contents: write
|
||||||
@@ -24,8 +24,6 @@ jobs:
|
|||||||
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
|
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
|
||||||
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
|
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
|
||||||
run: ./.github/scripts/signing.sh
|
run: ./.github/scripts/signing.sh
|
||||||
- name: Set Environment
|
|
||||||
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
|
|
||||||
- name: Update Build Number
|
- name: Update Build Number
|
||||||
env:
|
env:
|
||||||
RUN_ID: ${{ github.run_id }}
|
RUN_ID: ${{ github.run_id }}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
runs-on: macos-26
|
runs-on: xcode-27
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
@@ -21,8 +21,6 @@ jobs:
|
|||||||
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
|
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
|
||||||
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
|
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
|
||||||
run: ./.github/scripts/signing.sh
|
run: ./.github/scripts/signing.sh
|
||||||
- name: Set Environment
|
|
||||||
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
|
|
||||||
- name: Test
|
- name: Test
|
||||||
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme PackageTests test
|
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme PackageTests test
|
||||||
# SPM doesn't seem to pick up on the tests currently?
|
# SPM doesn't seem to pick up on the tests currently?
|
||||||
@@ -34,7 +32,7 @@ jobs:
|
|||||||
attestations: write
|
attestations: write
|
||||||
artifact-metadata: write
|
artifact-metadata: write
|
||||||
actions: read
|
actions: read
|
||||||
runs-on: macos-26
|
runs-on: xcode-27
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
@@ -47,8 +45,6 @@ jobs:
|
|||||||
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
|
APPLE_API_KEY_DATA: ${{ secrets.APPLE_API_KEY_DATA }}
|
||||||
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
|
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
|
||||||
run: ./.github/scripts/signing.sh
|
run: ./.github/scripts/signing.sh
|
||||||
- name: Set Environment
|
|
||||||
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
|
|
||||||
- name: Update Build Number
|
- name: Update Build Number
|
||||||
env:
|
env:
|
||||||
TAG_NAME: ${{ github.ref }}
|
TAG_NAME: ${{ github.ref }}
|
||||||
|
|||||||
@@ -5,12 +5,10 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
runs-on: macos-26
|
runs-on: xcode-27
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- name: Set Environment
|
|
||||||
run: sudo xcrun xcode-select -s /Applications/Xcode_26.4.app
|
|
||||||
- name: Test Main Packages
|
- name: Test Main Packages
|
||||||
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme PackageTests test
|
run: xcrun xcodebuild -project Sources/Secretive.xcodeproj -scheme PackageTests test
|
||||||
# SPM doesn't seem to pick up on the tests currently?
|
# SPM doesn't seem to pick up on the tests currently?
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ var localization: Resource {
|
|||||||
var swiftSettings: [PackageDescription.SwiftSetting] {
|
var swiftSettings: [PackageDescription.SwiftSetting] {
|
||||||
[
|
[
|
||||||
.swiftLanguageMode(.v6),
|
.swiftLanguageMode(.v6),
|
||||||
// .treatAllWarnings(as: .error),
|
.treatAllWarnings(as: .error),
|
||||||
.strictMemorySafety()
|
.strictMemorySafety()
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -490,8 +490,8 @@
|
|||||||
},
|
},
|
||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "new",
|
"state" : "translated",
|
||||||
"value" : "Build Log"
|
"value" : "Log de Build"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -675,8 +675,8 @@
|
|||||||
},
|
},
|
||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "new",
|
"state" : "translated",
|
||||||
"value" : "About Secretive"
|
"value" : "Sobre o Secretive"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -860,8 +860,8 @@
|
|||||||
},
|
},
|
||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "new",
|
"state" : "translated",
|
||||||
"value" : "Secretive is Open Source and MIT Licensed"
|
"value" : "O Secretive é Open Source e distribuído sob a licença MIT"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -1045,8 +1045,8 @@
|
|||||||
},
|
},
|
||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "new",
|
"state" : "translated",
|
||||||
"value" : "Special thanks our [Contributors](%1$(contributorsLink)@) and [Sponsors](%2$(sponsorsLink)@)"
|
"value" : "Agradecimentos especiais aos nossos [Contribuidores](%1$(contributorsLink)@) e [Patrocinadores](%2$(sponsorsLink)@)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -1230,8 +1230,8 @@
|
|||||||
},
|
},
|
||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "new",
|
"state" : "translated",
|
||||||
"value" : "View on GitHub"
|
"value" : "Ver no GitHub"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -1416,7 +1416,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"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."
|
"value" : "O Secretive não foi capaz de iniciar o SecretAgent. Por favor, tente reiniciar seu Mac e, se isso não resolver, registre uma issue no GitHub."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -1601,7 +1601,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Desabilitar o Agente"
|
"value" : "Desativar o Agente"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -2156,7 +2156,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Caminho do Socket"
|
"value" : "Caminho do socket"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -2526,7 +2526,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Agente iniciando"
|
"value" : "Iniciando Agente"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -2896,7 +2896,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"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.**"
|
"value" : "O SecretAgent é um processo que roda em segundo plano para assinar pedidos, sem precisar manter o Secretive aberto o tempo todo.\n\n**O Secretive não funcionará corretamente a menos que o agente esteja instalado e rodando.**"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -3081,7 +3081,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Agent não está rodando"
|
"value" : "O Agente não está rodando"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -3266,7 +3266,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"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.**"
|
"value" : "O SecretAgent é um processo que roda em segundo plano para assinar pedidos, sem precisar manter o Secretive aberto o tempo todo.\n\n**Você pode fechar o Secretive e tudo continuará funcionando.**"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -3451,7 +3451,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Secret Agent está rodando"
|
"value" : "O SecretAgent está rodando"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -3636,7 +3636,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Agent está rodando"
|
"value" : "O Agente está rodando"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -3879,21 +3879,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"All" : {
|
|
||||||
|
|
||||||
},
|
|
||||||
"Allow Connection Operations" : {
|
|
||||||
|
|
||||||
},
|
|
||||||
"Allow Forwarding" : {
|
|
||||||
|
|
||||||
},
|
|
||||||
"Allow Signing Operations" : {
|
|
||||||
|
|
||||||
},
|
|
||||||
"Allowed Domains" : {
|
|
||||||
|
|
||||||
},
|
},
|
||||||
"app_menu_help_button" : {
|
"app_menu_help_button" : {
|
||||||
"extractionState" : "manual",
|
"extractionState" : "manual",
|
||||||
@@ -4390,8 +4375,8 @@
|
|||||||
},
|
},
|
||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "new",
|
"state" : "translated",
|
||||||
"value" : "Later"
|
"value" : "Depois"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -4576,7 +4561,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Secretive necessita estar no seu diretório de Aplicações para funcionar corretamente. Por favor mova-o e abra novamente."
|
"value" : "O Secretive precisa estar no seu diretório de Aplicativos para funcionar corretamente. Por favor, mova-o e abra novamente."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -4760,8 +4745,8 @@
|
|||||||
},
|
},
|
||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "new",
|
"state" : "translated",
|
||||||
"value" : "Quit"
|
"value" : "Encerrar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -4946,7 +4931,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Secretive não está no diretório de Aplicações"
|
"value" : "O Secretive não está no diretório de Aplicativos"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -5132,7 +5117,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "destravar segredo “%1$(secretName)@” for %2$(duration)@"
|
"value" : "destrancar o segredo “%1$(secretName)@” por %2$(duration)@"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -5504,7 +5489,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "assinar requisição a partir do “%1$(appName)@” utilizando o segredo “%2$(secretName)@”"
|
"value" : "assinar um pedido de “%1$(appName)@” usando o segredo “%2$(secretName)@”"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -5943,6 +5928,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Critical Options"
|
"value" : "Critical Options"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Opções críticas"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -5954,6 +5945,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Extensions"
|
"value" : "Extensions"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Extensões"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -5965,6 +5962,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Key ID"
|
"value" : "Key ID"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "ID da Chave"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -5976,6 +5979,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Certificate Path"
|
"value" : "Certificate Path"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Caminho do Certificado"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -5987,6 +5996,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Principals"
|
"value" : "Principals"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Entidades Principais"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -5998,6 +6013,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Serial Number"
|
"value" : "Serial Number"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Número de Série"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -6009,6 +6030,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Public Key Fingerprint"
|
"value" : "Public Key Fingerprint"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Impressão Digital da Chave Pública"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -6020,6 +6047,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Signing CA Fingerprint"
|
"value" : "Signing CA Fingerprint"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Impressão Digital da AC de Assinatura"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -6031,6 +6064,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Valid After"
|
"value" : "Valid After"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Válido após"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -6042,6 +6081,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Valid Until"
|
"value" : "Valid Until"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Válido até"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -6053,6 +6098,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Validity Range"
|
"value" : "Validity Range"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Intervalo de validade"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -6185,7 +6236,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Clique para Copiar"
|
"value" : "Clique para copiar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -6740,7 +6791,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Se você mudar suas configurações de biometria de _qualquer forma_, incluindo adicionar uma nova impressão digital, esta chave não estará mais acessível."
|
"value" : "Se você mudar suas configurações de biometria de _qualquer forma_, incluindo adicionar uma nova impressão digital, esta chave não será mais acessível."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -7295,7 +7346,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Isto é exibido ao final da sua chave pública. É geralmente um endereço de email."
|
"value" : "Isso é exibido ao final da sua chave pública. É geralmente um endereço de email."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -7849,8 +7900,8 @@
|
|||||||
},
|
},
|
||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "new",
|
"state" : "translated",
|
||||||
"value" : "Unavailable on this version of macOS"
|
"value" : "Indisponível nessa versão do macOS"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -8035,7 +8086,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Aviso: Chaves ML-DSA são muito novas e não são suportadas por muitos servidores ainda. Por favor, verifique se o servidor que você estará utilizando esta chave aceita chaves ML-DSA."
|
"value" : "Aviso: Chaves ML-DSA são muito novas e ainda não suportadas por vários servidores. Por favor, verifique se o servidor em que você usará essa chave aceita chaves ML-DSA."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -8590,7 +8641,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Autenticação não é requerida enquanto seu Mac estiver destravado, mas você será notificado quando um segredo for utilizado."
|
"value" : "Nenhuma autenticação é solicitada enquanto seu Mac estiver desbloqueado, mas você será notificado quando um segredo for usado."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -9515,7 +9566,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Você será requerido a autenticar utilizando Touch ID, Apple Watch ou senha antes de cada uso."
|
"value" : "Você será solicitado a autenticar usando Touch ID, Apple Watch ou senha a cada uso."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -9700,7 +9751,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Requer Autenticação"
|
"value" : "Requer autenticação"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -9885,7 +9936,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Criar um Novo Segredo"
|
"value" : "Criar um novo Segredo"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -10070,7 +10121,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Não Apagar"
|
"value" : "Não apagar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -10440,7 +10491,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Se você deletar %1$(secretName)@, você não será permitido recuperá-lo. Digite “%2$(confirmSecretName)@” para confirmar."
|
"value" : "Se você apagar %1$(secretName)@, não poderá recuperá-lo. Digite “%2$(confirmSecretName)@” para confirmar."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -10625,7 +10676,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Deletar %1$(name)@?"
|
"value" : "Apagar %1$(name)@?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -10995,7 +11046,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Renomear"
|
"value" : "Salvar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -11180,7 +11231,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Criar um novo clicando aqui."
|
"value" : "Crie um novo clicando aqui."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -11550,7 +11601,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Parece que você pode ter atualizado recentemente o macOS. Às vezes, isto coloca o Secure Enclave em um estado estranho, e talvez você precise reiniciar seu Mac antes que as coisas comecem a funcionar novamente."
|
"value" : "Parece que você pode ter atualizado o macOS recentemente. Às vezes, isso coloca o Secure Enclave em um estado estranho, e talvez você precise reiniciar seu Mac antes que as coisas comecem a funcionar novamente."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -11735,7 +11786,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Credenciais faltando?"
|
"value" : "Segredos faltando?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -11920,7 +11971,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Utilize sua ferramenta de gestão de Smart Card para criar um segredo."
|
"value" : "Use a ferramenta de gestão do seu Smart Card para criar um segredo."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -12105,7 +12156,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Secretive suporta chaves EC256, EC384, RSA1024 e RSA2048."
|
"value" : "O Secretive suporta chaves EC256, EC384 e RSA2048."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -12348,9 +12399,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"example.com" : {
|
|
||||||
|
|
||||||
},
|
},
|
||||||
"export SSH_AUTH_SOCK=%@" : {
|
"export SSH_AUTH_SOCK=%@" : {
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
@@ -13206,7 +13254,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Há uma lista de instruções para aplicativos no GitHub, mantida pela comunidade. Se o aplicativo que você está procurando não é suportado, registre um ticket para que a comunidade possa ajudar."
|
"value" : "Há uma lista de instruções para aplicativos no GitHub, mantida pela comunidade. Se o aplicativo que você está procurando não é suportado, registre uma issue e a comunidade deve conseguir ajudar."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -13391,7 +13439,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Há uma lista de instruções para aplicativos no GitHub, mantida pela comunidade. Se o aplicativo que você está procurando não é suportado, registre um ticket para que a comunidade possa ajudar."
|
"value" : "Há uma lista de instruções para shells no GitHub, mantida pela comunidade. Se o shell que você está procurando não é suportado, registre uma issue e a comunidade deve conseguir ajudar."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -13459,6 +13507,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "your_email@example.com"
|
"value" : "your_email@example.com"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "seu_email@exemplo.com.br"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -13470,6 +13524,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "The email address you set when you configured git (visible in gitconfig)."
|
"value" : "The email address you set when you configured git (visible in gitconfig)."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "O endereço de email que você definiu quando configurou o git (visível no gitconfig)."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -13481,6 +13541,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Email Address"
|
"value" : "Email Address"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Endereço de email"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -13610,7 +13676,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Você precisará criar uma Credencial antes de configurar esta ação."
|
"value" : "Você precisará criar um Segredo antes de configurar essa ação."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -13795,7 +13861,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Configurar Usando Credencial"
|
"value" : "Configurar usando Segredo"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -13980,7 +14046,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Sem Credenciais"
|
"value" : "Sem Segredo"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -14165,7 +14231,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Credencial"
|
"value" : "Segredo"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -14350,7 +14416,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Você pode configurar mais de uma ferramenta, eles geralmente não interferem uns com os outros."
|
"value" : "Você pode configurar mais de uma ferramenta, elas geralmente não interferem umas com as outras."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -14905,7 +14971,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Se você estiver tentando registrar seus commits no git, configure o Git Signing."
|
"value" : "Se você estiver tentando assinar seus commits no git, configure Assinatura no Git."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -15090,7 +15156,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Se você está tentando configurar qualquer coisa em sua linha de comando para usar com Secretive, configure seu shell."
|
"value" : "Se você está tentando configurar qualquer coisa em sua linha de comando para usar o Secretive, configure seu shell."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -15275,7 +15341,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Se você não sabia qual shell você usa e não alterou, você provavelmente está usando `%(shellName)@`."
|
"value" : "Se você não sabe qual shell usa e não o alterou, você provavelmente está usando `%(shellName)@`."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -15645,7 +15711,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Configurando Ferramentas para Secretive"
|
"value" : "Configurando ferramentas para o Secretive"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -15830,7 +15896,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "A maioria das ferramentas tentará procurar chaves SSH no disco em `~/.ssh`. Para usar o Secretive, precisamos configurar essas ferramentas para comunicar com o Secretive."
|
"value" : "A maioria das ferramentas tentará procurar chaves SSH no disco em `~/.ssh`. Para usar o Secretive, precisamos configurar essas ferramentas para falarem com o Secretive ao invés disso."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -16015,7 +16081,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "O que devo Configurar?"
|
"value" : "O que devo configurar?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -17126,7 +17192,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Arquivo de Configuração"
|
"value" : "Arquivo de configuração"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -17496,7 +17562,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Você pode pedir ao SSH para usar uma chave específica para um determinado host. Consulte a documentação na web para mais detalhes."
|
"value" : "Você pode dizer ao SSH para usar uma chave específica com determinado host. Consulte a documentação na web para mais detalhes."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -18238,7 +18304,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Assinatura Git"
|
"value" : "Assinatura no Git"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -18795,7 +18861,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Visualizar no GitHub"
|
"value" : "Ver no GitHub"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -18980,7 +19046,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Ver Documentação na Web"
|
"value" : "Ver documentação na web"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -19223,9 +19289,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"Key Properties" : {
|
|
||||||
|
|
||||||
},
|
},
|
||||||
"no_secure_storage_description" : {
|
"no_secure_storage_description" : {
|
||||||
"extractionState" : "manual",
|
"extractionState" : "manual",
|
||||||
@@ -19538,7 +19601,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Sem Armazenamento Seguro Disponível"
|
"value" : "Sem Armazenamento Seguro disponível"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -19723,7 +19786,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Se você está buscando adicionar um para seu Mac, o YubiKey 5 Series é muito bom."
|
"value" : "Se você procura adicionar um para seu Mac, o YubiKey 5 Series é muito bom."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -19909,7 +19972,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Deixar Destrancado"
|
"value" : "Manter destrancado"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -20095,7 +20158,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Não Destravar"
|
"value" : "Não destrancar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -20162,6 +20225,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Name"
|
"value" : "Name"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Nome"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -20173,11 +20242,14 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Certificate Name"
|
"value" : "Certificate Name"
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"Restrictions" : {
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Nome do Certificado"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"reveal_in_finder_button" : {
|
"reveal_in_finder_button" : {
|
||||||
"extractionState" : "manual",
|
"extractionState" : "manual",
|
||||||
@@ -20372,6 +20444,12 @@
|
|||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Matching Certificates"
|
"value" : "Matching Certificates"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"pt-BR" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Certificados correspondentes"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -21426,7 +21504,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Renomear"
|
"value" : "Editar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -21975,7 +22053,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Este aplicativo de ajuda é chamado **Secret Agent** e você pode vê-lo no Monitor de Atividades de tempo em tempo."
|
"value" : "Esse aplicativo auxiliar se chama **Secret Agent** e você pode vê-lo no Monitor de Atividades de tempos em tempos."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -22160,7 +22238,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Secretive precisa configurar um aplicativo de ajuda para funcionar corretamente. Isso irá assinar requisições de clientes SSH no plano de fundo para que você não precise manter o aplicativo Secretive aberto."
|
"value" : "O Secretive precisa configurar um aplicativo auxiliar para funcionar corretamente. Ele irá assinar pedidos de clientes SSH em segundo plano, para que você não precise manter o aplicativo principal do Secretive aberto."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -22530,7 +22608,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Configurar Agent"
|
"value" : "Configurar Agente"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -23455,7 +23533,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Secretive irá periodicamente verificar com o GitHub para verificar se existe uma nova versão. Se você ver alguma requisição de rede para o GitHub, este é o porque."
|
"value" : "O Secretive vai verificar o GitHub periodicamente para saber se há uma nova versão. Se notar requisições de rede para o GitHub, esse é o motivo."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -24382,7 +24460,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Utilizando o segredo %1$(secretName)@"
|
"value" : "Usando o segredo %1$(secretName)@"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -24568,7 +24646,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Requisição Assinada fr %1$(appName)@"
|
"value" : "Assinado pedido de %1$(appName)@"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -24939,7 +25017,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Cartões com chip"
|
"value" : "Smart Card"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -24997,9 +25075,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"Specific" : {
|
|
||||||
|
|
||||||
},
|
},
|
||||||
"unnamed_secret" : {
|
"unnamed_secret" : {
|
||||||
"extractionState" : "manual",
|
"extractionState" : "manual",
|
||||||
@@ -25127,7 +25202,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Sem Nome"
|
"value" : "Sem nome"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -25312,7 +25387,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Atualização Crítica de Segurança Requerida"
|
"value" : "Atualização Crítica de Segurança necessária"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -25682,7 +25757,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Atualização Disponível"
|
"value" : "Atualização disponível"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -26426,7 +26501,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Clique para Atualizar"
|
"value" : "Clique para atualizar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -26797,7 +26872,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Notas de Mudanças"
|
"value" : "Notas de Lançamento"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -26982,7 +27057,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Versão de Teste"
|
"value" : "Build de Teste"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
@@ -27537,7 +27612,7 @@
|
|||||||
"pt-BR" : {
|
"pt-BR" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
"state" : "translated",
|
"state" : "translated",
|
||||||
"value" : "Baixar a última Nightly Build"
|
"value" : "Baixar a Nightly Build mais recente"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ro" : {
|
"ro" : {
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ import XPCWrappers
|
|||||||
self.currentVersion = currentVersion
|
self.currentVersion = currentVersion
|
||||||
_ = Task {
|
_ = Task {
|
||||||
if checkOnLaunch {
|
if checkOnLaunch {
|
||||||
try? await checkForUpdates()
|
try await checkForUpdates()
|
||||||
}
|
}
|
||||||
while !Task.isCancelled {
|
while true {
|
||||||
try? await Task.sleep(for: .seconds(Int(checkFrequency)))
|
try await Task.sleep(for: .seconds(Int(checkFrequency)))
|
||||||
try await checkForUpdates()
|
try await checkForUpdates()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -151,7 +151,6 @@ extension SSHAgentInputParser {
|
|||||||
let signature = try signatureBlob.readNextChunk()
|
let signature = try signatureBlob.readNextChunk()
|
||||||
let forwarding = try reader.readNextByteAsBool()
|
let forwarding = try reader.readNextByteAsBool()
|
||||||
switch hostKeyType {
|
switch hostKeyType {
|
||||||
// FIXME: FACTOR OUT?
|
|
||||||
case "ssh-ed25519":
|
case "ssh-ed25519":
|
||||||
let hostKey = try CryptoKit.Curve25519.Signing.PublicKey(rawRepresentation: hostKeyData)
|
let hostKey = try CryptoKit.Curve25519.Signing.PublicKey(rawRepresentation: hostKeyData)
|
||||||
guard hostKey.isValidSignature(signature, for: sessionID) else {
|
guard hostKey.isValidSignature(signature, for: sessionID) else {
|
||||||
@@ -186,7 +185,6 @@ extension SSHAgentInputParser {
|
|||||||
throw AgentParsingError.unhandledRequest
|
throw AgentParsingError.unhandledRequest
|
||||||
}
|
}
|
||||||
case "ssh-rsa":
|
case "ssh-rsa":
|
||||||
// FIXME: HANDLE
|
|
||||||
throw AgentParsingError.unhandledRequest
|
throw AgentParsingError.unhandledRequest
|
||||||
default:
|
default:
|
||||||
throw AgentParsingError.unhandledRequest
|
throw AgentParsingError.unhandledRequest
|
||||||
|
|||||||
@@ -79,19 +79,23 @@ extension Agent {
|
|||||||
default:
|
default:
|
||||||
target = nil
|
target = nil
|
||||||
}
|
}
|
||||||
|
_ = target
|
||||||
response.append(SSHAgent.Response.agentSignResponse.data)
|
response.append(SSHAgent.Response.agentSignResponse.data)
|
||||||
response.append(try await sign(data: context.dataToSign.raw, keyBlob: context.keyBlob, provenance: provenance, target: target))
|
response.append(try await sign(data: context.dataToSign.raw, keyBlob: context.keyBlob, provenance: provenance, target: target))
|
||||||
logger.debug("Agent returned \(SSHAgent.Response.agentSignResponse.debugDescription)")
|
logger.debug("Agent returned \(SSHAgent.Response.agentSignResponse.debugDescription)")
|
||||||
case .protocolExtension(.openSSH(.sessionBind(let bind))):
|
case .protocolExtension(.openSSH(.sessionBind(let bind))):
|
||||||
|
// This is disabled until forward enforcement is handled.
|
||||||
|
_ = bind
|
||||||
response = try await MainActor.run {
|
response = try await MainActor.run {
|
||||||
guard sessionID == nil else {
|
logger.debug("Agent received bind request but not currently supported.")
|
||||||
logger.error("Agent received bind request, but already bound.")
|
throw UnhandledRequestError()
|
||||||
// FIXME: This will break forwarding for now.
|
// guard sessionID == nil else {
|
||||||
throw BindingFailure()
|
// logger.error("Agent received bind request, but already bound.")
|
||||||
}
|
// throw BindingFailure()
|
||||||
logger.debug("Agent bound")
|
// }
|
||||||
sessionID = bind
|
// logger.debug("Agent bound")
|
||||||
return SSHAgent.Response.agentSuccess.data
|
// sessionID = bind
|
||||||
|
// return SSHAgent.Response.agentSuccess.data
|
||||||
}
|
}
|
||||||
logger.debug("Agent returned \(SSHAgent.Response.agentSuccess.debugDescription)")
|
logger.debug("Agent returned \(SSHAgent.Response.agentSuccess.debugDescription)")
|
||||||
case .unknown(let value):
|
case .unknown(let value):
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
import Foundation
|
|
||||||
|
|
||||||
extension ProcessInfo {
|
|
||||||
private static let fallbackTeamID = "Z72PRUAWF6"
|
|
||||||
|
|
||||||
private static let teamID: String = {
|
|
||||||
#if DEBUG
|
|
||||||
guard let task = SecTaskCreateFromSelf(nil) else {
|
|
||||||
assertionFailure("SecTaskCreateFromSelf failed")
|
|
||||||
return fallbackTeamID
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let value = SecTaskCopyValueForEntitlement(task, "com.apple.developer.team-identifier" as CFString, nil) as? String else {
|
|
||||||
// assertionFailure("SecTaskCopyValueForEntitlement(com.apple.developer.team-identifier) failed")
|
|
||||||
return fallbackTeamID
|
|
||||||
}
|
|
||||||
|
|
||||||
return value
|
|
||||||
#else
|
|
||||||
/// Always use hardcoded team ID for release builds, just in case.
|
|
||||||
return fallbackTeamID
|
|
||||||
#endif
|
|
||||||
}()
|
|
||||||
|
|
||||||
public var teamID: String { Self.teamID }
|
|
||||||
}
|
|
||||||
@@ -12,7 +12,9 @@ public final class XPCServiceDelegate: NSObject, NSXPCListenerDelegate {
|
|||||||
newConnection.exportedInterface = NSXPCInterface(with: (any _XPCProtocol).self)
|
newConnection.exportedInterface = NSXPCInterface(with: (any _XPCProtocol).self)
|
||||||
let exportedObject = exportedObject
|
let exportedObject = exportedObject
|
||||||
newConnection.exportedObject = exportedObject
|
newConnection.exportedObject = exportedObject
|
||||||
newConnection.setCodeSigningRequirement("anchor apple generic and certificate leaf[subject.OU] = \"\(ProcessInfo.processInfo.teamID)\"")
|
#if !DEBUG
|
||||||
|
newConnection.setCodeSigningRequirement("anchor apple generic and certificate leaf[subject.OU] = \"Z72PRUAWF6\"")
|
||||||
|
#endif
|
||||||
newConnection.resume()
|
newConnection.resume()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ public struct XPCTypedSession<ResponseType: Codable & Sendable, ErrorType: Error
|
|||||||
public init(serviceName: String, warmup: Bool = false) async throws {
|
public init(serviceName: String, warmup: Bool = false) async throws {
|
||||||
let connection = NSXPCConnection(serviceName: serviceName)
|
let connection = NSXPCConnection(serviceName: serviceName)
|
||||||
connection.remoteObjectInterface = NSXPCInterface(with: (any _XPCProtocol).self)
|
connection.remoteObjectInterface = NSXPCInterface(with: (any _XPCProtocol).self)
|
||||||
connection.setCodeSigningRequirement("anchor apple generic and certificate leaf[subject.OU] = \"\(ProcessInfo.processInfo.teamID)\"")
|
#if !DEBUG
|
||||||
|
connection.setCodeSigningRequirement("anchor apple generic and certificate leaf[subject.OU] = \"Z72PRUAWF6\"")
|
||||||
|
#endif
|
||||||
connection.resume()
|
connection.resume()
|
||||||
guard let proxy = connection.remoteObjectProxy as? _XPCProtocol else { fatalError() }
|
guard let proxy = connection.remoteObjectProxy as? _XPCProtocol else { fatalError() }
|
||||||
self.connection = connection
|
self.connection = connection
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import CertificateKit
|
|||||||
@Test func emptyStores() async throws {
|
@Test func emptyStores() async throws {
|
||||||
let agent = Agent(storeList: SecretStoreList(), certificateStore: CertificateStore())
|
let agent = Agent(storeList: SecretStoreList(), certificateStore: CertificateStore())
|
||||||
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestIdentities)
|
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestIdentities)
|
||||||
let response = await agent.handle(request: request, provenance: .test)
|
let response = await agent.handle(request: request, provenance: .test, hosts: nil)
|
||||||
#expect(response == Constants.Responses.requestIdentitiesEmpty)
|
#expect(response == Constants.Responses.requestIdentitiesEmpty)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ import CertificateKit
|
|||||||
let list = await storeList(with: [Constants.Secrets.ecdsa256Secret, Constants.Secrets.ecdsa384Secret])
|
let list = await storeList(with: [Constants.Secrets.ecdsa256Secret, Constants.Secrets.ecdsa384Secret])
|
||||||
let agent = Agent(storeList: list, certificateStore: CertificateStore())
|
let agent = Agent(storeList: list, certificateStore: CertificateStore())
|
||||||
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestIdentities)
|
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestIdentities)
|
||||||
let response = await agent.handle(request: request, provenance: .test)
|
let response = await agent.handle(request: request, provenance: .test, hosts: nil)
|
||||||
|
|
||||||
let actual = OpenSSHReader(data: response)
|
let actual = OpenSSHReader(data: response)
|
||||||
let expected = OpenSSHReader(data: Constants.Responses.requestIdentitiesMultiple)
|
let expected = OpenSSHReader(data: Constants.Responses.requestIdentitiesMultiple)
|
||||||
@@ -35,7 +35,7 @@ import CertificateKit
|
|||||||
let list = await storeList(with: [Constants.Secrets.ecdsa256Secret, Constants.Secrets.ecdsa384Secret])
|
let list = await storeList(with: [Constants.Secrets.ecdsa256Secret, Constants.Secrets.ecdsa384Secret])
|
||||||
let agent = Agent(storeList: list, certificateStore: CertificateStore())
|
let agent = Agent(storeList: list, certificateStore: CertificateStore())
|
||||||
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestSignatureWithNoneMatching)
|
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestSignatureWithNoneMatching)
|
||||||
let response = await agent.handle(request: request, provenance: .test)
|
let response = await agent.handle(request: request, provenance: .test, hosts: nil)
|
||||||
#expect(response == Constants.Responses.requestFailure)
|
#expect(response == Constants.Responses.requestFailure)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ import CertificateKit
|
|||||||
guard case SSHAgent.Request.signRequest(let context) = request else { return }
|
guard case SSHAgent.Request.signRequest(let context) = request else { return }
|
||||||
let list = await storeList(with: [Constants.Secrets.ecdsa256Secret, Constants.Secrets.ecdsa384Secret])
|
let list = await storeList(with: [Constants.Secrets.ecdsa256Secret, Constants.Secrets.ecdsa384Secret])
|
||||||
let agent = Agent(storeList: list, certificateStore: CertificateStore())
|
let agent = Agent(storeList: list, certificateStore: CertificateStore())
|
||||||
let response = await agent.handle(request: request, provenance: .test)
|
let response = await agent.handle(request: request, provenance: .test, hosts: nil)
|
||||||
let responseReader = OpenSSHReader(data: response)
|
let responseReader = OpenSSHReader(data: response)
|
||||||
let length = try responseReader.readNextBytes(as: UInt32.self)
|
let length = try responseReader.readNextBytes(as: UInt32.self)
|
||||||
let type = try responseReader.readNextBytes(as: UInt8.self)
|
let type = try responseReader.readNextBytes(as: UInt8.self)
|
||||||
@@ -68,7 +68,7 @@ import CertificateKit
|
|||||||
let signature = try P256.Signing.ECDSASignature(rawRepresentation: rs)
|
let signature = try P256.Signing.ECDSASignature(rawRepresentation: rs)
|
||||||
// Correct signature
|
// Correct signature
|
||||||
#expect(try P256.Signing.PublicKey(x963Representation: Constants.Secrets.ecdsa256Secret.publicKey)
|
#expect(try P256.Signing.PublicKey(x963Representation: Constants.Secrets.ecdsa256Secret.publicKey)
|
||||||
.isValidSignature(signature, for: context.dataToSign))
|
.isValidSignature(signature, for: context.dataToSign.raw))
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Witness protocol
|
// MARK: Witness protocol
|
||||||
@@ -79,7 +79,7 @@ import CertificateKit
|
|||||||
return true
|
return true
|
||||||
}, witness: { _, _ in })
|
}, witness: { _, _ in })
|
||||||
let agent = Agent(storeList: list, certificateStore: CertificateStore(), witness: witness)
|
let agent = Agent(storeList: list, certificateStore: CertificateStore(), witness: witness)
|
||||||
let response = await agent.handle(request: .signRequest(.empty), provenance: .test)
|
let response = await agent.handle(request: .signRequest(.empty), provenance: .test, hosts: nil)
|
||||||
#expect(response == Constants.Responses.requestFailure)
|
#expect(response == Constants.Responses.requestFailure)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ import CertificateKit
|
|||||||
})
|
})
|
||||||
let agent = Agent(storeList: list, certificateStore: CertificateStore(), witness: witness)
|
let agent = Agent(storeList: list, certificateStore: CertificateStore(), witness: witness)
|
||||||
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestSignature)
|
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestSignature)
|
||||||
_ = await agent.handle(request: request, provenance: .test)
|
_ = await agent.handle(request: request, provenance: .test, hosts: nil)
|
||||||
#expect(witnessed)
|
#expect(witnessed)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,7 +109,7 @@ import CertificateKit
|
|||||||
})
|
})
|
||||||
let agent = Agent(storeList: list, certificateStore: CertificateStore(), witness: witness)
|
let agent = Agent(storeList: list, certificateStore: CertificateStore(), witness: witness)
|
||||||
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestSignature)
|
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestSignature)
|
||||||
_ = await agent.handle(request: request, provenance: .test)
|
_ = await agent.handle(request: request, provenance: .test, hosts: nil)
|
||||||
#expect(witnessTrace == speakNowTrace)
|
#expect(witnessTrace == speakNowTrace)
|
||||||
#expect(witnessTrace == .test)
|
#expect(witnessTrace == .test)
|
||||||
}
|
}
|
||||||
@@ -122,7 +122,7 @@ import CertificateKit
|
|||||||
store.shouldThrow = true
|
store.shouldThrow = true
|
||||||
let agent = Agent(storeList: list, certificateStore: CertificateStore())
|
let agent = Agent(storeList: list, certificateStore: CertificateStore())
|
||||||
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestSignature)
|
let request = try SSHAgentInputParser().parse(data: Constants.Requests.requestSignature)
|
||||||
let response = await agent.handle(request: request, provenance: .test)
|
let response = await agent.handle(request: request, provenance: .test, hosts: nil)
|
||||||
#expect(response == Constants.Responses.requestFailure)
|
#expect(response == Constants.Responses.requestFailure)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,7 +130,7 @@ import CertificateKit
|
|||||||
|
|
||||||
@Test func unhandledAdd() async throws {
|
@Test func unhandledAdd() async throws {
|
||||||
let agent = Agent(storeList: SecretStoreList(), certificateStore: CertificateStore())
|
let agent = Agent(storeList: SecretStoreList(), certificateStore: CertificateStore())
|
||||||
let response = await agent.handle(request: .addIdentity, provenance: .test)
|
let response = await agent.handle(request: .addIdentity, provenance: .test, hosts: nil)
|
||||||
#expect(response == Constants.Responses.requestFailure)
|
#expect(response == Constants.Responses.requestFailure)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ struct StubWitness {
|
|||||||
|
|
||||||
extension StubWitness: SigningWitness {
|
extension StubWitness: SigningWitness {
|
||||||
|
|
||||||
func speakNowOrForeverHoldYourPeace(forAccessTo secret: AnySecret, from store: AnySecretStore, by provenance: SigningRequestProvenance) throws {
|
func speakNowOrForeverHoldYourPeace(forAccessTo secret: AnySecret, from store: AnySecretStore, by provenance: SigningRequestProvenance, target: SigningRequestTarget?) throws {
|
||||||
let objection = speakNow(secret, provenance)
|
let objection = speakNow(secret, provenance)
|
||||||
if objection {
|
if objection {
|
||||||
throw TheresMyChance()
|
throw TheresMyChance()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func witness(accessTo secret: AnySecret, from store: AnySecretStore, by provenance: SigningRequestProvenance) throws {
|
func witness(accessTo secret: AnySecret, from store: AnySecretStore, by provenance: SigningRequestProvenance, target: SigningRequestTarget?) throws {
|
||||||
witness(secret, provenance)
|
witness(secret, provenance)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import SwiftUI
|
|||||||
|
|
||||||
extension EnvironmentValues {
|
extension EnvironmentValues {
|
||||||
|
|
||||||
@MainActor fileprivate static let _certificateStore = CertificateStore()
|
@MainActor fileprivate static let _certificateStore: CertificateStore = CertificateStore()
|
||||||
|
|
||||||
@MainActor var certificateStore: CertificateStore {
|
@MainActor var certificateStore: CertificateStore {
|
||||||
EnvironmentValues._certificateStore
|
EnvironmentValues._certificateStore
|
||||||
@@ -49,20 +49,20 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||||||
|
|
||||||
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
||||||
logger.debug("SecretAgent finished launching")
|
logger.debug("SecretAgent finished launching")
|
||||||
_ = Task {
|
Task {
|
||||||
for await session in socketController.sessions {
|
for await session in socketController.sessions {
|
||||||
_ = Task {
|
Task {
|
||||||
let inputParser = try await XPCAgentInputParser()
|
|
||||||
let hostsReader = try await XPCHostsfileReader()
|
|
||||||
let hosts = try? await hostsReader.read()
|
|
||||||
do {
|
do {
|
||||||
|
let inputParser = try await XPCAgentInputParser()
|
||||||
|
let hostsReader = try? await XPCHostsfileReader()
|
||||||
|
let hosts = try? await hostsReader?.read()
|
||||||
for await message in session.messages {
|
for await message in session.messages {
|
||||||
let request = try await inputParser.parse(data: message)
|
let request = try await inputParser.parse(data: message)
|
||||||
let agentResponse = await agent.handle(request: request, provenance: session.provenance, hosts: hosts)
|
let agentResponse = await agent.handle(request: request, provenance: session.provenance, hosts: hosts)
|
||||||
try session.write(agentResponse)
|
try session.write(agentResponse)
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
try session.close()
|
try? session.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,10 +16,10 @@
|
|||||||
<string>1</string>
|
<string>1</string>
|
||||||
<key>com.apple.security.hardened-process.hardened-heap</key>
|
<key>com.apple.security.hardened-process.hardened-heap</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.smartcard</key>
|
|
||||||
<true/>
|
|
||||||
<key>com.apple.security.hardened-process.platform-restrictions-string</key>
|
<key>com.apple.security.hardened-process.platform-restrictions-string</key>
|
||||||
<string>2</string>
|
<string>2</string>
|
||||||
|
<key>com.apple.security.smartcard</key>
|
||||||
|
<true/>
|
||||||
<key>keychain-access-groups</key>
|
<key>keychain-access-groups</key>
|
||||||
<array>
|
<array>
|
||||||
<string>$(AppIdentifierPrefix)com.maxgoedjen.Secretive</string>
|
<string>$(AppIdentifierPrefix)com.maxgoedjen.Secretive</string>
|
||||||
|
|||||||
@@ -8,10 +8,9 @@ final class SecretAgentHostsfileReader: NSObject, XPCProtocol {
|
|||||||
private let logger = Logger(subsystem: "com.maxgoedjen.secretive.SecretAgentHostsfileReader", category: "SecretAgentHostsfileReader")
|
private let logger = Logger(subsystem: "com.maxgoedjen.secretive.SecretAgentHostsfileReader", category: "SecretAgentHostsfileReader")
|
||||||
|
|
||||||
func process(_ data: Data) async throws -> [Data: String] {
|
func process(_ data: Data) async throws -> [Data: String] {
|
||||||
logger.log("Parser parsed certificate")
|
logger.log("Parsing hostsfile")
|
||||||
var result: [Data: String] = [:]
|
var result: [Data: String] = [:]
|
||||||
// FIXME: THIS
|
for try await line in URL(filePath: NSHomeDirectory().appending("/.ssh/known_hosts")).lines {
|
||||||
for try await line in URL(filePath: "/Users/max/.ssh/known_hosts").lines {
|
|
||||||
let split = line.split(separator: " ").map(String.init)
|
let split = line.split(separator: " ").map(String.init)
|
||||||
guard split.count == 3 else { continue }
|
guard split.count == 3 else { continue }
|
||||||
guard let decoded = Data(base64Encoded: split[2]) else { continue }
|
guard let decoded = Data(base64Encoded: split[2]) else { continue }
|
||||||
|
|||||||
@@ -1710,17 +1710,22 @@
|
|||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_ASSET_PATHS = "\"SecretAgent/Preview Content\"";
|
DEVELOPMENT_ASSET_PATHS = "\"SecretAgent/Preview Content\"";
|
||||||
ENABLE_APP_SANDBOX = NO;
|
ENABLE_APP_SANDBOX = YES;
|
||||||
ENABLE_ENHANCED_SECURITY = YES;
|
ENABLE_ENHANCED_SECURITY = YES;
|
||||||
ENABLE_HARDENED_RUNTIME = NO;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
|
ENABLE_INCOMING_NETWORK_CONNECTIONS = NO;
|
||||||
|
ENABLE_OUTGOING_NETWORK_CONNECTIONS = NO;
|
||||||
ENABLE_POINTER_AUTHENTICATION = YES;
|
ENABLE_POINTER_AUTHENTICATION = YES;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
|
ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
|
||||||
|
ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
|
ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_CAMERA = NO;
|
ENABLE_RESOURCE_ACCESS_CAMERA = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
|
ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_LOCATION = NO;
|
ENABLE_RESOURCE_ACCESS_LOCATION = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_PHOTO_LIBRARY = NO;
|
ENABLE_RESOURCE_ACCESS_PHOTO_LIBRARY = NO;
|
||||||
|
ENABLE_RESOURCE_ACCESS_PRINTING = NO;
|
||||||
|
ENABLE_RESOURCE_ACCESS_USB = NO;
|
||||||
INFOPLIST_FILE = SecretAgent/Info.plist;
|
INFOPLIST_FILE = SecretAgent/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -1736,7 +1741,6 @@
|
|||||||
RUNTIME_EXCEPTION_DEBUGGING_TOOL = NO;
|
RUNTIME_EXCEPTION_DEBUGGING_TOOL = NO;
|
||||||
RUNTIME_EXCEPTION_DISABLE_EXECUTABLE_PAGE_PROTECTION = NO;
|
RUNTIME_EXCEPTION_DISABLE_EXECUTABLE_PAGE_PROTECTION = NO;
|
||||||
RUNTIME_EXCEPTION_DISABLE_LIBRARY_VALIDATION = NO;
|
RUNTIME_EXCEPTION_DISABLE_LIBRARY_VALIDATION = NO;
|
||||||
SWIFT_TREAT_WARNINGS_AS_ERRORS = NO;
|
|
||||||
};
|
};
|
||||||
name = Test;
|
name = Test;
|
||||||
};
|
};
|
||||||
@@ -1751,17 +1755,22 @@
|
|||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_ASSET_PATHS = "\"SecretAgent/Preview Content\"";
|
DEVELOPMENT_ASSET_PATHS = "\"SecretAgent/Preview Content\"";
|
||||||
DEVELOPMENT_TEAM = "$(SECRETIVE_DEVELOPMENT_TEAM)";
|
DEVELOPMENT_TEAM = "$(SECRETIVE_DEVELOPMENT_TEAM)";
|
||||||
ENABLE_APP_SANDBOX = NO;
|
ENABLE_APP_SANDBOX = YES;
|
||||||
ENABLE_ENHANCED_SECURITY = YES;
|
ENABLE_ENHANCED_SECURITY = YES;
|
||||||
ENABLE_HARDENED_RUNTIME = NO;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
|
ENABLE_INCOMING_NETWORK_CONNECTIONS = NO;
|
||||||
|
ENABLE_OUTGOING_NETWORK_CONNECTIONS = NO;
|
||||||
ENABLE_POINTER_AUTHENTICATION = YES;
|
ENABLE_POINTER_AUTHENTICATION = YES;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
|
ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
|
||||||
|
ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
|
ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_CAMERA = NO;
|
ENABLE_RESOURCE_ACCESS_CAMERA = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
|
ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_LOCATION = NO;
|
ENABLE_RESOURCE_ACCESS_LOCATION = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_PHOTO_LIBRARY = NO;
|
ENABLE_RESOURCE_ACCESS_PHOTO_LIBRARY = NO;
|
||||||
|
ENABLE_RESOURCE_ACCESS_PRINTING = NO;
|
||||||
|
ENABLE_RESOURCE_ACCESS_USB = NO;
|
||||||
INFOPLIST_FILE = SecretAgent/Info.plist;
|
INFOPLIST_FILE = SecretAgent/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -1777,7 +1786,6 @@
|
|||||||
RUNTIME_EXCEPTION_DEBUGGING_TOOL = NO;
|
RUNTIME_EXCEPTION_DEBUGGING_TOOL = NO;
|
||||||
RUNTIME_EXCEPTION_DISABLE_EXECUTABLE_PAGE_PROTECTION = NO;
|
RUNTIME_EXCEPTION_DISABLE_EXECUTABLE_PAGE_PROTECTION = NO;
|
||||||
RUNTIME_EXCEPTION_DISABLE_LIBRARY_VALIDATION = NO;
|
RUNTIME_EXCEPTION_DISABLE_LIBRARY_VALIDATION = NO;
|
||||||
SWIFT_TREAT_WARNINGS_AS_ERRORS = NO;
|
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -1793,17 +1801,22 @@
|
|||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
DEVELOPMENT_ASSET_PATHS = "\"SecretAgent/Preview Content\"";
|
DEVELOPMENT_ASSET_PATHS = "\"SecretAgent/Preview Content\"";
|
||||||
DEVELOPMENT_TEAM = "$(SECRETIVE_DEVELOPMENT_TEAM)";
|
DEVELOPMENT_TEAM = "$(SECRETIVE_DEVELOPMENT_TEAM)";
|
||||||
ENABLE_APP_SANDBOX = NO;
|
ENABLE_APP_SANDBOX = YES;
|
||||||
ENABLE_ENHANCED_SECURITY = YES;
|
ENABLE_ENHANCED_SECURITY = YES;
|
||||||
ENABLE_HARDENED_RUNTIME = NO;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
|
ENABLE_INCOMING_NETWORK_CONNECTIONS = NO;
|
||||||
|
ENABLE_OUTGOING_NETWORK_CONNECTIONS = NO;
|
||||||
ENABLE_POINTER_AUTHENTICATION = YES;
|
ENABLE_POINTER_AUTHENTICATION = YES;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
|
ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO;
|
||||||
|
ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
|
ENABLE_RESOURCE_ACCESS_CALENDARS = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_CAMERA = NO;
|
ENABLE_RESOURCE_ACCESS_CAMERA = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
|
ENABLE_RESOURCE_ACCESS_CONTACTS = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_LOCATION = NO;
|
ENABLE_RESOURCE_ACCESS_LOCATION = NO;
|
||||||
ENABLE_RESOURCE_ACCESS_PHOTO_LIBRARY = NO;
|
ENABLE_RESOURCE_ACCESS_PHOTO_LIBRARY = NO;
|
||||||
|
ENABLE_RESOURCE_ACCESS_PRINTING = NO;
|
||||||
|
ENABLE_RESOURCE_ACCESS_USB = NO;
|
||||||
INFOPLIST_FILE = SecretAgent/Info.plist;
|
INFOPLIST_FILE = SecretAgent/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -1820,7 +1833,6 @@
|
|||||||
RUNTIME_EXCEPTION_DEBUGGING_TOOL = NO;
|
RUNTIME_EXCEPTION_DEBUGGING_TOOL = NO;
|
||||||
RUNTIME_EXCEPTION_DISABLE_EXECUTABLE_PAGE_PROTECTION = NO;
|
RUNTIME_EXCEPTION_DISABLE_EXECUTABLE_PAGE_PROTECTION = NO;
|
||||||
RUNTIME_EXCEPTION_DISABLE_LIBRARY_VALIDATION = NO;
|
RUNTIME_EXCEPTION_DISABLE_LIBRARY_VALIDATION = NO;
|
||||||
SWIFT_TREAT_WARNINGS_AS_ERRORS = NO;
|
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -1835,6 +1847,7 @@
|
|||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
DEVELOPMENT_TEAM = "$(SECRETIVE_DEVELOPMENT_TEAM)";
|
DEVELOPMENT_TEAM = "$(SECRETIVE_DEVELOPMENT_TEAM)";
|
||||||
ENABLE_APP_SANDBOX = YES;
|
ENABLE_APP_SANDBOX = YES;
|
||||||
|
ENABLE_ENHANCED_SECURITY = YES;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -1866,6 +1879,7 @@
|
|||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
ENABLE_APP_SANDBOX = YES;
|
ENABLE_APP_SANDBOX = YES;
|
||||||
|
ENABLE_ENHANCED_SECURITY = YES;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -1899,6 +1913,7 @@
|
|||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
"DEVELOPMENT_TEAM[sdk=macosx*]" = Z72PRUAWF6;
|
"DEVELOPMENT_TEAM[sdk=macosx*]" = Z72PRUAWF6;
|
||||||
ENABLE_APP_SANDBOX = YES;
|
ENABLE_APP_SANDBOX = YES;
|
||||||
|
ENABLE_ENHANCED_SECURITY = YES;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
|||||||
@@ -12,11 +12,11 @@
|
|||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.hardened-process.dyld-ro</key>
|
<key>com.apple.security.hardened-process.dyld-ro</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.hardened-process.enhanced-security-version</key>
|
<key>com.apple.security.hardened-process.enhanced-security-version-string</key>
|
||||||
<integer>1</integer>
|
<string>2</string>
|
||||||
<key>com.apple.security.hardened-process.hardened-heap</key>
|
<key>com.apple.security.hardened-process.hardened-heap</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.hardened-process.platform-restrictions</key>
|
<key>com.apple.security.hardened-process.platform-restrictions-string</key>
|
||||||
<integer>2</integer>
|
<string>2</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
Reference in New Issue
Block a user