- Иконка: AppIconDark.icns + переключение Dock-иконки по effectiveAppearance (KVO)
- Сайдбар: убран 'Скриншоты', 'Файлы' → 'Доступные мне' (заглушка), первая вкладка — все файлы и папки
- SyncPolicyStore.globalMode по умолчанию .cloudOnly ('В облаке')
- build.sh/smoke_test.sh: SDKROOT из Xcode (фикс SDK-конфликта тулчейна 6.3.3/SDK 6.4)
- ПРАВКИ.md: полный аудит и план доработок
54 lines
1.9 KiB
Bash
Executable File
54 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# Smoke-тесты логики без запуска GUI
|
|
set -euo pipefail
|
|
ROOT="$(cd "$(dirname "$0")" && pwd)"
|
|
cd "$ROOT"
|
|
|
|
# SDK из CommandLineTools может не совпадать с тулчейном — берём SDK из Xcode.
|
|
export SDKROOT="$(xcrun --sdk macosx --show-sdk-path 2>/dev/null || echo "${SDKROOT:-}")"
|
|
|
|
echo "1) build"
|
|
swift build -c release >/dev/null
|
|
|
|
echo "2) OAuth parse"
|
|
swift -e '
|
|
import Foundation
|
|
func parse(_ input: String) -> String? {
|
|
let trimmed = input.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
if trimmed.isEmpty { return nil }
|
|
if trimmed.contains("access_token=") {
|
|
let parts = trimmed.replacingOccurrences(of: "#", with: "&").replacingOccurrences(of: "?", with: "&").split(separator: "&")
|
|
for part in parts {
|
|
let kv = part.split(separator: "=", maxSplits: 1)
|
|
if kv.count == 2, kv[0] == "access_token" { return String(kv[1]) }
|
|
}
|
|
}
|
|
if trimmed.range(of: "^[A-Za-z0-9_\\-]{16,}$", options: .regularExpression) != nil { return trimmed }
|
|
return nil
|
|
}
|
|
assert(parse("0c4181a7c2cf4521964a72ff57a34a07") == "0c4181a7c2cf4521964a72ff57a34a07")
|
|
assert(parse("https://oauth.yandex.ru/verification_code#access_token=abc123&token_type=bearer") == "abc123")
|
|
print("ok")
|
|
'
|
|
|
|
echo "3) API path encoding"
|
|
swift -e '
|
|
import Foundation
|
|
func diskPath(_ path: String) -> String {
|
|
if path.hasPrefix("disk:") || path.hasPrefix("trash:") { return path }
|
|
let normalized = path.hasPrefix("/") ? path : "/" + path
|
|
return "disk:\(normalized)"
|
|
}
|
|
assert(diskPath("/Фото") == "disk:/Фото")
|
|
assert(diskPath("Фото") == "disk:/Фото")
|
|
assert(diskPath("trash:/x") == "trash:/x")
|
|
print("ok")
|
|
'
|
|
|
|
echo "4) app bundle"
|
|
APP="$ROOT/.build/YandexDisk.app"
|
|
test -x "$APP/Contents/MacOS/YandexDiskClient"
|
|
plutil -lint "$APP/Contents/Info.plist"
|
|
codesign -dv "$APP" 2>&1 | head -5
|
|
echo "ALL SMOKE TESTS PASSED"
|