Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 795fcabe94 | |||
| f1c82ab2a7 | |||
| da1f84a271 | |||
| 650adecff7 | |||
| 44b367c830 | |||
| 41d88fa4ec | |||
| 45c1301a8c | |||
| 0a113b5f2d | |||
| 0029c93dd8 | |||
| 1b673784a0 | |||
| 374caf14c0 | |||
| 87f051a3a1 | |||
| 6ffa0a951d | |||
| 8a0489103a | |||
| 18debc3ed3 | |||
| 7b6f1db509 | |||
| 7c91b7848a | |||
| 1ec63d8aee | |||
| fe69ebc21c | |||
| 6842731242 | |||
| 2e7f852baa | |||
| 9964307ee8 | |||
| bf65074c50 |
@@ -0,0 +1 @@
|
||||
github: macmade
|
||||
@@ -0,0 +1,26 @@
|
||||
name: ci-mac
|
||||
on: [push]
|
||||
jobs:
|
||||
ci:
|
||||
runs-on: macos-latest
|
||||
strategy:
|
||||
matrix:
|
||||
run-config:
|
||||
- { scheme: 'Notarize', configuration: 'Debug', project: 'Notarize.xcodeproj', build: 1, analyze: 1, test: 0, info: 1, destination: 'platform=macOS' }
|
||||
- { scheme: 'Notarize', configuration: 'Release', project: 'Notarize.xcodeproj', build: 1, analyze: 1, test: 0, info: 1, destination: 'platform=macOS' }
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
|
||||
- uses: macmade/action-xcodebuild@v1.0.0
|
||||
|
||||
- uses: macmade/action-slack@v1.0.0
|
||||
if: ${{ always() }}
|
||||
env:
|
||||
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
with:
|
||||
channel: '#ci'
|
||||
status: ${{ job.status }}
|
||||
title: ${{ matrix.run-config[ 'scheme' ] }} - ${{ matrix.run-config[ 'configuration' ] }}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
language: objective-c
|
||||
xcode_project: Notarize.xcodeproj
|
||||
xcode_scheme: Notarize
|
||||
osx_image: xcode10
|
||||
osx_image: xcode12
|
||||
script:
|
||||
- xcodebuild build -project Notarize.xcodeproj -scheme Notarize
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,128 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible 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.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders 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, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
xs-labs.com.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2021 Jean-David Gadina - www.xs-labs.com
|
||||
|
||||
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.
|
||||
@@ -376,7 +376,7 @@
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 1010;
|
||||
LastUpgradeCheck = 1010;
|
||||
LastUpgradeCheck = 1300;
|
||||
ORGANIZATIONNAME = "XS-Labs";
|
||||
TargetAttributes = {
|
||||
059A0B4621905010004E1D89 = {
|
||||
@@ -545,7 +545,6 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 05D746EC21924850002CF085 /* Debug.xcconfig */;
|
||||
buildSettings = {
|
||||
SWIFT_VERSION = 4.2;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -553,7 +552,6 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 05D746ED21924850002CF085 /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
SWIFT_VERSION = 4.2;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@@ -565,6 +563,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.2.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.xs-labs.Notarize";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
@@ -578,6 +577,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.2.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.xs-labs.Notarize";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1010"
|
||||
LastUpgradeVersion = "1300"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
@@ -27,8 +27,6 @@
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
@@ -38,8 +36,8 @@
|
||||
ReferencedContainer = "container:Notarize.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
@@ -61,8 +59,6 @@
|
||||
ReferencedContainer = "container:Notarize.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
|
||||
@@ -26,74 +26,110 @@ import Foundation
|
||||
|
||||
class ALTool
|
||||
{
|
||||
private var username: String
|
||||
private var password: String
|
||||
private var username: String
|
||||
private var password: String
|
||||
private var providerShortName: String?
|
||||
|
||||
class func isAvailable() -> Bool
|
||||
{
|
||||
let out = try? ALTool.run( arguments: [ "--help" ] )
|
||||
guard let out = try? ALTool.run( arguments: [ "--help" ] ) else
|
||||
{
|
||||
return false
|
||||
}
|
||||
|
||||
return out?.count ?? 0 > 0
|
||||
return out.stdout.count > 0 || out.stderr.count > 0
|
||||
}
|
||||
|
||||
init( username: String, password: String )
|
||||
init( username: String, password: String, providerShortName: String? )
|
||||
{
|
||||
self.username = username
|
||||
self.password = password
|
||||
self.username = username
|
||||
self.password = password
|
||||
self.providerShortName = providerShortName
|
||||
}
|
||||
|
||||
func checkPassword() throws
|
||||
{
|
||||
do
|
||||
{
|
||||
let _ = try ALTool.run( arguments: [ "--notarization-history", "-u", self.username, "-p", self.password, "--output-format", "xml" ] )
|
||||
}
|
||||
catch let e as NSError
|
||||
{
|
||||
throw e
|
||||
}
|
||||
let _ = try ALTool.run( arguments: self.arguments( [ "--notarization-history", "0" ] ) + [ "--output-format", "xml" ] )
|
||||
}
|
||||
|
||||
func notarizationHistory() throws -> String?
|
||||
func notarizationHistory( page: Int64 ) throws -> String?
|
||||
{
|
||||
do
|
||||
{
|
||||
let out = try ALTool.run( arguments: [ "--notarization-history", "-u", self.username, "-p", self.password, "--output-format", "xml" ] )
|
||||
|
||||
return out.trimmingCharacters( in: NSCharacterSet.whitespacesAndNewlines )
|
||||
}
|
||||
catch let e as NSError
|
||||
{
|
||||
throw e
|
||||
}
|
||||
let out = try ALTool.run( arguments: self.arguments( [ "--notarization-history", "\( page )" ] ) + [ "--output-format", "xml" ] )
|
||||
|
||||
return out.stdout.trimmingCharacters( in: NSCharacterSet.whitespacesAndNewlines )
|
||||
}
|
||||
|
||||
func notarizationInfo( for uuid: String ) throws -> String?
|
||||
{
|
||||
do
|
||||
{
|
||||
let out = try ALTool.run( arguments: [ "--notarization-info", uuid, "-u", self.username, "-p", self.password, "--output-format", "xml" ] )
|
||||
|
||||
return out.trimmingCharacters( in: NSCharacterSet.whitespacesAndNewlines )
|
||||
}
|
||||
catch let e as NSError
|
||||
{
|
||||
throw e
|
||||
}
|
||||
let out = try ALTool.run( arguments: self.arguments( [ "--notarization-info", uuid ] ) + [ "--output-format", "xml" ] )
|
||||
|
||||
return out.stdout.trimmingCharacters( in: NSCharacterSet.whitespacesAndNewlines )
|
||||
}
|
||||
|
||||
private class func run( arguments: [ String ] ) throws -> String
|
||||
private func arguments( _ arguments: [ String ] ) -> [ String ]
|
||||
{
|
||||
var args = [ "altool" ]
|
||||
var arguments = arguments
|
||||
|
||||
args.append( contentsOf: arguments )
|
||||
arguments.append( "-u" )
|
||||
arguments.append( self.username )
|
||||
arguments.append( "-p" )
|
||||
arguments.append( self.password )
|
||||
|
||||
if let name = self.providerShortName
|
||||
{
|
||||
arguments.append( "--asc-provider" )
|
||||
arguments.append( name )
|
||||
}
|
||||
|
||||
return arguments
|
||||
}
|
||||
|
||||
private class var executablePath: String?
|
||||
{
|
||||
let pipe = Pipe()
|
||||
let process = Process()
|
||||
process.launchPath = "/usr/bin/xcrun"
|
||||
process.arguments = args
|
||||
process.arguments = [ "-f", "altool" ]
|
||||
process.standardOutput = pipe
|
||||
|
||||
do
|
||||
{
|
||||
try process.run()
|
||||
}
|
||||
catch let e as NSError
|
||||
{
|
||||
Swift.print( e )
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
process.waitUntilExit()
|
||||
|
||||
let data = pipe.fileHandleForReading.readDataToEndOfFile()
|
||||
|
||||
guard let out = String( bytes: data, encoding: .utf8 ) else
|
||||
{
|
||||
return nil
|
||||
}
|
||||
|
||||
return out.trimmingCharacters( in: .whitespacesAndNewlines )
|
||||
}
|
||||
|
||||
private class func run( arguments: [ String ] ) throws -> ( stdout: String, stderr: String )
|
||||
{
|
||||
guard let exec = ALTool.executablePath else
|
||||
{
|
||||
throw NSError( domain: NSCocoaErrorDomain, code: -1, userInfo: [ NSLocalizedDescriptionKey : "altool executable not found" ] )
|
||||
}
|
||||
|
||||
let pipeOut = Pipe()
|
||||
let pipeErr = Pipe()
|
||||
let process = Process()
|
||||
process.launchPath = exec
|
||||
process.arguments = arguments
|
||||
process.standardOutput = pipeOut
|
||||
process.standardError = pipeErr
|
||||
|
||||
do
|
||||
{
|
||||
try process.run()
|
||||
@@ -107,26 +143,33 @@ class ALTool
|
||||
|
||||
process.waitUntilExit()
|
||||
|
||||
let data = pipe.fileHandleForReading.readDataToEndOfFile()
|
||||
let dataOut = pipeOut.fileHandleForReading.readDataToEndOfFile()
|
||||
let dataErr = pipeErr.fileHandleForReading.readDataToEndOfFile()
|
||||
|
||||
guard let out = String( bytes: data, encoding: .utf8 ) else
|
||||
guard let out = String( bytes: dataOut, encoding: .utf8 ),
|
||||
let err = String( bytes: dataErr, encoding: .utf8 )
|
||||
else
|
||||
{
|
||||
throw NSError( domain: NSCocoaErrorDomain, code: -1, userInfo: [ NSLocalizedDescriptionKey : "No data received from altool" ] )
|
||||
}
|
||||
|
||||
if let data = out.data( using: .utf8 )
|
||||
{
|
||||
if let dict = try? PropertyListSerialization.propertyList( from: data, options: [], format: nil ) as? NSDictionary
|
||||
if let dict = try? PropertyListSerialization.propertyList( from: data, options: [], format: nil ) as? [ AnyHashable : Any ]
|
||||
{
|
||||
if let errors = dict?.object( forKey: "product-errors") as? NSArray
|
||||
if let errors = dict[ "product-errors" ] as? [ Any ]
|
||||
{
|
||||
if errors.count > 0
|
||||
if errors.count > 0, let errorDict = errors[ 0 ] as? [ AnyHashable : Any ]
|
||||
{
|
||||
if let errorDict = errors.object( at: 0 ) as? NSDictionary
|
||||
let code = errorDict[ "code" ] as? NSNumber ?? NSNumber( integerLiteral: 0 )
|
||||
let message = errorDict[ "message" ] as? String ?? "Unknown error"
|
||||
|
||||
if let info = errorDict[ "userInfo" ] as? [ AnyHashable : Any ], let failure = info[ "NSLocalizedFailureReason" ] as? String
|
||||
{
|
||||
throw NSError( domain: NSCocoaErrorDomain, code: code.intValue, userInfo: [ NSLocalizedDescriptionKey : message, NSLocalizedRecoverySuggestionErrorKey : failure ] )
|
||||
}
|
||||
else
|
||||
{
|
||||
let code = errorDict.object( forKey: "code" ) as? NSNumber ?? NSNumber( integerLiteral: 0 )
|
||||
let message = errorDict.object( forKey: "message" ) as? NSString ?? "Unknown error" as NSString
|
||||
|
||||
throw NSError( domain: NSCocoaErrorDomain, code: code.intValue, userInfo: [ NSLocalizedDescriptionKey : "Error", NSLocalizedRecoverySuggestionErrorKey : message ] )
|
||||
}
|
||||
}
|
||||
@@ -134,6 +177,6 @@ class ALTool
|
||||
}
|
||||
}
|
||||
|
||||
return out
|
||||
return ( stdout: out, stderr: err )
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*******************************************************************************
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2018 Jean-David Gadina - www.xs-labs.com
|
||||
* Copyright (c) 2020 Jean-David Gadina - www.xs-labs.com
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -24,31 +24,33 @@
|
||||
|
||||
import Cocoa
|
||||
|
||||
@objc class AboutWindowController: NSWindowController
|
||||
public class AboutWindowController: NSWindowController
|
||||
{
|
||||
@objc private dynamic var name: String?
|
||||
@objc private dynamic var version: String?
|
||||
@objc private dynamic var copyright: String?
|
||||
|
||||
override var windowNibName: NSNib.Name?
|
||||
public override var windowNibName: NSNib.Name?
|
||||
{
|
||||
return NSNib.Name( NSStringFromClass( type( of: self ) ) )
|
||||
return NSStringFromClass( type( of: self ) )
|
||||
}
|
||||
|
||||
override func windowDidLoad()
|
||||
override public func windowDidLoad()
|
||||
{
|
||||
super.windowDidLoad()
|
||||
|
||||
self.window?.titlebarAppearsTransparent = true
|
||||
self.window?.titleVisibility = .hidden
|
||||
let version = Bundle.main.object( forInfoDictionaryKey: "CFBundleShortVersionString" ) as? String ?? "0.0.0"
|
||||
|
||||
self.name = Bundle.main.object( forInfoDictionaryKey: "CFBundleName" ) as? String
|
||||
self.version = Bundle.main.object( forInfoDictionaryKey: "CFBundleShortVersionString" ) as? String
|
||||
self.copyright = Bundle.main.object( forInfoDictionaryKey: "NSHumanReadableCopyright" ) as? String
|
||||
|
||||
if let rev = Bundle.main.object( forInfoDictionaryKey: "CFBundleVersion" ) as? String
|
||||
if let build = Bundle.main.object( forInfoDictionaryKey: "CFBundleVersion" ) as? String
|
||||
{
|
||||
self.version?.append( " (" + rev + ")" )
|
||||
self.version = "\(version) (\(build))"
|
||||
}
|
||||
else
|
||||
{
|
||||
self.version = version
|
||||
}
|
||||
|
||||
self.name = Bundle.main.object( forInfoDictionaryKey: "CFBundleName" ) as? String
|
||||
self.copyright = Bundle.main.object( forInfoDictionaryKey: "NSHumanReadableCopyright" ) as? String
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,16 +26,18 @@ import Cocoa
|
||||
|
||||
@objc class Account: NSObject
|
||||
{
|
||||
@objc public private( set ) dynamic var username: String
|
||||
@objc public private( set ) dynamic var password: String?
|
||||
@objc public private( set ) dynamic var useKeychain: Bool
|
||||
@objc public private( set ) dynamic var username: String
|
||||
@objc public private( set ) dynamic var password: String?
|
||||
@objc public private( set ) dynamic var providerShortName: String?
|
||||
@objc public private( set ) dynamic var useKeychain: Bool
|
||||
|
||||
private static var sessionPasswords = [ String : String ]()
|
||||
|
||||
init( username: String, useKeychain: Bool )
|
||||
init( username: String, useKeychain: Bool, providerShortName: String? )
|
||||
{
|
||||
self.username = username
|
||||
self.useKeychain = useKeychain
|
||||
self.username = username
|
||||
self.useKeychain = useKeychain
|
||||
self.providerShortName = providerShortName
|
||||
|
||||
guard let bundleID = Bundle.main.bundleIdentifier else
|
||||
{
|
||||
@@ -53,11 +55,12 @@ import Cocoa
|
||||
}
|
||||
}
|
||||
|
||||
init( username: String, password: String, useKeychain: Bool )
|
||||
init( username: String, password: String, useKeychain: Bool, providerShortName: String? )
|
||||
{
|
||||
self.username = username
|
||||
self.password = password
|
||||
self.useKeychain = useKeychain
|
||||
self.username = username
|
||||
self.password = password
|
||||
self.useKeychain = useKeychain
|
||||
self.providerShortName = providerShortName
|
||||
|
||||
guard let bundleID = Bundle.main.bundleIdentifier else
|
||||
{
|
||||
|
||||
@@ -26,10 +26,11 @@ import Cocoa
|
||||
|
||||
class AccountWindowController: NSWindowController
|
||||
{
|
||||
@objc public dynamic var username = ""
|
||||
@objc public private( set ) dynamic var password = ""
|
||||
@objc public private( set ) dynamic var keepInKeychain = false
|
||||
@objc public private( set ) dynamic var loading = false
|
||||
@objc public dynamic var username = ""
|
||||
@objc public dynamic var providerShortName = ""
|
||||
@objc public private( set ) dynamic var password = ""
|
||||
@objc public private( set ) dynamic var keepInKeychain = false
|
||||
@objc public private( set ) dynamic var loading = false
|
||||
|
||||
override var windowNibName: NSNib.Name?
|
||||
{
|
||||
@@ -52,7 +53,7 @@ class AccountWindowController: NSWindowController
|
||||
return
|
||||
}
|
||||
|
||||
let altool = ALTool( username: self.username, password: self.password )
|
||||
let altool = ALTool( username: self.username, password: self.password, providerShortName: self.providerShortName.count > 0 ? self.providerShortName : nil )
|
||||
|
||||
self.loading = true
|
||||
|
||||
|
||||
@@ -26,68 +26,40 @@ import Cocoa
|
||||
|
||||
@objc class HistoryItem: NSObject
|
||||
{
|
||||
@objc public dynamic var date: NSDate
|
||||
@objc public dynamic var date: Date
|
||||
@objc public dynamic var uuid: String
|
||||
@objc public dynamic var success: Bool
|
||||
@objc public dynamic var status: Int
|
||||
@objc public dynamic var message: String
|
||||
@objc public dynamic var logURL: String?
|
||||
|
||||
class func ItemsFromDictionary( dict: NSDictionary? ) -> [ HistoryItem ]
|
||||
class func ItemsFromDictionary( dict: [ AnyHashable : Any ]? ) -> [ HistoryItem ]
|
||||
{
|
||||
guard let history = dict?.object( forKey: "notarization-history" ) as? NSDictionary else
|
||||
guard let history = dict?[ "notarization-history" ] as? [ AnyHashable : Any ],
|
||||
let items = history[ "items" ] as? [ Any ]
|
||||
else
|
||||
{
|
||||
return []
|
||||
}
|
||||
|
||||
guard let items = history.object( forKey: "items" ) as? NSArray else
|
||||
return items.compactMap
|
||||
{
|
||||
return []
|
||||
$0 as? [ AnyHashable : Any ]
|
||||
}
|
||||
|
||||
var objects = [ HistoryItem ]()
|
||||
|
||||
for o in items
|
||||
.compactMap
|
||||
{
|
||||
guard let item = o as? NSDictionary else
|
||||
{
|
||||
continue
|
||||
}
|
||||
|
||||
guard let historyItem = HistoryItem( dict: item ) else
|
||||
{
|
||||
continue
|
||||
}
|
||||
|
||||
objects.append( historyItem )
|
||||
HistoryItem( dict: $0 )
|
||||
}
|
||||
|
||||
return objects
|
||||
}
|
||||
|
||||
init?( dict: NSDictionary )
|
||||
init?( dict: [ AnyHashable : Any ] )
|
||||
{
|
||||
guard let date = dict.object( forKey: "Date" ) as? NSDate else
|
||||
{
|
||||
return nil
|
||||
}
|
||||
|
||||
guard let uuid = dict.object( forKey: "RequestUUID" ) as? String else
|
||||
{
|
||||
return nil
|
||||
}
|
||||
|
||||
guard let status = dict.object( forKey: "Status" ) as? String else
|
||||
{
|
||||
return nil
|
||||
}
|
||||
|
||||
guard let code = dict.object( forKey: "Status Code" ) as? NSNumber else
|
||||
{
|
||||
return nil
|
||||
}
|
||||
|
||||
guard let message = dict.object( forKey: "Status Message" ) as? String else
|
||||
guard let date = dict[ "Date" ] as? Date,
|
||||
let uuid = dict[ "RequestUUID" ] as? String,
|
||||
let status = dict[ "Status" ] as? String,
|
||||
let code = dict[ "Status Code" ] as? NSNumber,
|
||||
let message = dict[ "Status Message" ] as? String
|
||||
else
|
||||
{
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -82,12 +82,9 @@ class HistoryViewController: NSViewController, NSTableViewDelegate, NSTableViewD
|
||||
|
||||
@IBAction func showInfo( _ sender: Any? )
|
||||
{
|
||||
guard let item = sender as? HistoryItem else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let url = URL( string: item.logURL ?? "" ) else
|
||||
guard let item = sender as? HistoryItem,
|
||||
let url = URL( string: item.logURL ?? "" )
|
||||
else
|
||||
{
|
||||
return
|
||||
}
|
||||
@@ -134,39 +131,87 @@ class HistoryViewController: NSViewController, NSTableViewDelegate, NSTableViewD
|
||||
|
||||
DispatchQueue.global( qos: .userInitiated ).async
|
||||
{
|
||||
let altool = ALTool( username: account.username, password: password )
|
||||
let xml = try? altool.notarizationHistory()
|
||||
|
||||
if let xmlData = xml??.data( using: .utf8 )
|
||||
do
|
||||
{
|
||||
if let history = try? PropertyListSerialization.propertyList( from: xmlData, options: [], format: nil ) as? NSDictionary
|
||||
let items = try self.loadHistory( username: account.username, password: password, providerShortName: account.providerShortName )
|
||||
|
||||
DispatchQueue.main.async
|
||||
{
|
||||
let items = HistoryItem.ItemsFromDictionary( dict: history )
|
||||
|
||||
DispatchQueue.main.async
|
||||
items.forEach
|
||||
{
|
||||
items.forEach
|
||||
o in
|
||||
|
||||
if self.items.contains( o ) == false
|
||||
{
|
||||
o in
|
||||
|
||||
if self.items.contains( o ) == false
|
||||
{
|
||||
self.items.insert( o )
|
||||
}
|
||||
self.items.insert( o )
|
||||
}
|
||||
}
|
||||
|
||||
self.loading = false
|
||||
self.refreshing = false
|
||||
}
|
||||
}
|
||||
|
||||
DispatchQueue.main.async
|
||||
catch let error
|
||||
{
|
||||
self.loading = false
|
||||
self.refreshing = false
|
||||
if userInitiated
|
||||
{
|
||||
DispatchQueue.main.async
|
||||
{
|
||||
let alert = NSAlert( error: error )
|
||||
|
||||
if let window = self.view.window
|
||||
{
|
||||
alert.beginSheetModal( for: window, completionHandler: nil )
|
||||
}
|
||||
else
|
||||
{
|
||||
alert.runModal()
|
||||
}
|
||||
|
||||
self.loading = false
|
||||
self.refreshing = false
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
print( error )
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func loadHistory( username: String, password: String, providerShortName: String? ) throws -> [ HistoryItem ]
|
||||
{
|
||||
var items = [ HistoryItem ]()
|
||||
let altool = ALTool( username: username, password: password, providerShortName: providerShortName )
|
||||
var page = Int64( 0 )
|
||||
|
||||
repeat
|
||||
{
|
||||
let xml = try altool.notarizationHistory( page: page )
|
||||
page = -1
|
||||
|
||||
if let xmlData = xml?.data( using: .utf8 )
|
||||
{
|
||||
if let history = try? PropertyListSerialization.propertyList( from: xmlData, options: [], format: nil ) as? [ AnyHashable : Any ]
|
||||
{
|
||||
let current = HistoryItem.ItemsFromDictionary( dict: history )
|
||||
|
||||
items.append( contentsOf: current )
|
||||
|
||||
if current.count > 0, let history = history[ "notarization-history" ] as? [ AnyHashable : Any ], let next = history[ "next-page" ] as? Int64
|
||||
{
|
||||
page = next
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
while page >= 0
|
||||
|
||||
return items
|
||||
}
|
||||
|
||||
private func getInfo()
|
||||
{
|
||||
DispatchQueue.main.async
|
||||
@@ -180,50 +225,26 @@ class HistoryViewController: NSViewController, NSTableViewDelegate, NSTableViewD
|
||||
|
||||
DispatchQueue.global( qos: .userInitiated ).async
|
||||
{
|
||||
guard let account = self.account else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let password = account.password else
|
||||
guard let account = self.account,
|
||||
let password = account.password
|
||||
else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
let items = DispatchQueue.main.sync { return self.items }
|
||||
let altool = ALTool( username: account.username, password: password )
|
||||
let altool = ALTool( username: account.username, password: password, providerShortName: account.providerShortName )
|
||||
let group = DispatchGroup()
|
||||
|
||||
for item in items.filter( { o in o.logURL == nil } )
|
||||
items.filter( { o in o.logURL == nil } ).forEach
|
||||
{
|
||||
DispatchQueue.global( qos: .userInitiated ).async( group: group )
|
||||
item in DispatchQueue.global( qos: .userInitiated ).async( group: group )
|
||||
{
|
||||
guard let xml = try? altool.notarizationInfo( for: item.uuid ) else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let xmlData = xml?.data( using: .utf8 ) else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let info = try? PropertyListSerialization.propertyList( from: xmlData, options: [], format: nil ) as? NSDictionary else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let plist = info else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let notarization = plist[ "notarization-info" ] as? NSDictionary else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let url = notarization[ "LogFileURL" ] as? String else
|
||||
guard let xml = try? altool.notarizationInfo( for: item.uuid ),
|
||||
let xmlData = xml.data( using: .utf8 ),
|
||||
let info = try? PropertyListSerialization.propertyList( from: xmlData, options: [], format: nil ) as? [ AnyHashable : Any ],
|
||||
let notarization = info[ "notarization-info" ] as? [ AnyHashable : Any ],
|
||||
let url = notarization[ "LogFileURL" ] as? String else
|
||||
{
|
||||
return
|
||||
}
|
||||
@@ -254,22 +275,16 @@ class HistoryViewController: NSViewController, NSTableViewDelegate, NSTableViewD
|
||||
|
||||
self.add = AccountWindowController()
|
||||
|
||||
guard let add = self.add else
|
||||
guard let add = self.add,
|
||||
let account = self.account,
|
||||
let sheet = add.window
|
||||
else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let account = self.account else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let sheet = add.window else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
add.username = account.username
|
||||
add.username = account.username
|
||||
add.providerShortName = account.providerShortName ?? ""
|
||||
|
||||
self.view.window?.beginSheet( sheet )
|
||||
{
|
||||
@@ -292,7 +307,7 @@ class HistoryViewController: NSViewController, NSTableViewDelegate, NSTableViewD
|
||||
return
|
||||
}
|
||||
|
||||
let account = Account( username: add.username, password: add.password, useKeychain: add.keepInKeychain )
|
||||
let account = Account( username: add.username, password: add.password, useKeychain: add.keepInKeychain, providerShortName: add.providerShortName.count > 0 ? add.providerShortName : nil )
|
||||
|
||||
Preferences.shared.addAccount( account );
|
||||
|
||||
|
||||
@@ -82,7 +82,8 @@ class MainWindowController: NSWindowController
|
||||
return
|
||||
}
|
||||
|
||||
self.controller = controller
|
||||
self.controller = controller
|
||||
controller.view.frame = self.historyViewContainer.bounds
|
||||
|
||||
controller.view.translatesAutoresizingMaskIntoConstraints = false
|
||||
|
||||
@@ -100,12 +101,9 @@ class MainWindowController: NSWindowController
|
||||
|
||||
@IBAction func refresh( _ sender: Any? )
|
||||
{
|
||||
guard let account = self.accountsController.selectedObjects.first as? Account else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let controller = self.controllers[ account.username ] else
|
||||
guard let account = self.accountsController.selectedObjects.first as? Account,
|
||||
let controller = self.controllers[ account.username ]
|
||||
else
|
||||
{
|
||||
return
|
||||
}
|
||||
@@ -148,7 +146,7 @@ class MainWindowController: NSWindowController
|
||||
return
|
||||
}
|
||||
|
||||
let account = Account( username: add.username, password: add.password, useKeychain: add.keepInKeychain )
|
||||
let account = Account( username: add.username, password: add.password, useKeychain: add.keepInKeychain, providerShortName: add.providerShortName.count > 0 ? add.providerShortName : nil )
|
||||
|
||||
Preferences.shared.addAccount( account );
|
||||
}
|
||||
@@ -156,12 +154,9 @@ class MainWindowController: NSWindowController
|
||||
|
||||
@IBAction func removeAccount( _ sender: Any? )
|
||||
{
|
||||
guard let account = self.accountsController.selectedObjects.first as? Account else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
guard let window = self.window else
|
||||
guard let account = self.accountsController.selectedObjects.first as? Account,
|
||||
let window = self.window
|
||||
else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ import Cocoa
|
||||
@objc public class Preferences: NSObject
|
||||
{
|
||||
@objc public dynamic var lastStart: Date?
|
||||
@objc public dynamic var accounts: NSDictionary?
|
||||
@objc public dynamic var accounts: [ AnyHashable : Any ]?
|
||||
|
||||
@objc public static let shared = Preferences()
|
||||
|
||||
@@ -83,46 +83,68 @@ import Cocoa
|
||||
|
||||
func addAccount( _ account: Account )
|
||||
{
|
||||
let accounts = self.accounts?.mutableCopy() as? NSMutableDictionary ?? NSMutableDictionary()
|
||||
var accounts = self.accounts ?? [:]
|
||||
|
||||
accounts.setObject( NSNumber( booleanLiteral: account.useKeychain ), forKey: account.username as NSString )
|
||||
if let name = account.providerShortName
|
||||
{
|
||||
accounts[ account.username ] =
|
||||
[
|
||||
"UseKeychain" : NSNumber( booleanLiteral: account.useKeychain ),
|
||||
"ProviderShortName" : name
|
||||
]
|
||||
}
|
||||
else
|
||||
{
|
||||
accounts[ account.username ] = NSNumber( booleanLiteral: account.useKeychain )
|
||||
}
|
||||
|
||||
self.accounts = accounts.copy() as? NSDictionary
|
||||
self.accounts = accounts
|
||||
}
|
||||
|
||||
func removeAccount( _ account: Account )
|
||||
{
|
||||
guard let accounts = self.accounts?.mutableCopy() as? NSMutableDictionary else
|
||||
guard var accounts = self.accounts else
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
accounts.removeObject( forKey: account.username as NSString )
|
||||
accounts.removeValue( forKey: account.username )
|
||||
|
||||
if account.useKeychain, let bundleID = Bundle.main.bundleIdentifier
|
||||
{
|
||||
let _ = Keychain( keychain: nil ).delete( service: bundleID, account: account.username )
|
||||
}
|
||||
|
||||
self.accounts = accounts.copy() as? NSDictionary
|
||||
self.accounts = accounts
|
||||
}
|
||||
|
||||
func getAccounts() -> [ Account ]
|
||||
{
|
||||
var accounts = [ Account ]()
|
||||
|
||||
for account in self.accounts ?? [ : ]
|
||||
guard let accounts = self.accounts else
|
||||
{
|
||||
guard let username = account.key as? String else
|
||||
{
|
||||
continue
|
||||
}
|
||||
|
||||
let useKeychain = ( account.value as? NSNumber )?.boolValue ?? false
|
||||
|
||||
accounts.append( Account( username: username, useKeychain: useKeychain ) )
|
||||
return []
|
||||
}
|
||||
|
||||
return accounts
|
||||
return accounts.compactMap
|
||||
{
|
||||
guard let username = $0.key as? String else
|
||||
{
|
||||
return nil
|
||||
}
|
||||
|
||||
if let info = $0.value as? [ AnyHashable : Any ]
|
||||
{
|
||||
let useKeychain = info[ "UseKeychain" ] as? NSNumber
|
||||
let providerShortName = info[ "ProviderShortName" ] as? String
|
||||
|
||||
return Account( username: username, useKeychain: useKeychain?.boolValue ?? false, providerShortName: providerShortName )
|
||||
}
|
||||
else
|
||||
{
|
||||
let useKeychain = ( $0.value as? NSNumber )?.boolValue ?? false
|
||||
|
||||
return Account( username: username, useKeychain: useKeychain, providerShortName: nil )
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -17,13 +17,15 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.1.0</string>
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>27</string>
|
||||
<string>49</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.developer-tools</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2018 XS-Labs. All rights reserved.</string>
|
||||
<string>Copyright © 2020 XS-Labs. All rights reserved.</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
|
||||
@@ -1,98 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17506" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17506"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="AboutWindowController" customModule="Notarize" customModuleProvider="target">
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="AboutWindowController" customModule="Xclean" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="window" destination="QvC-M9-y7g" id="3uC-xA-AhB"/>
|
||||
<outlet property="window" destination="QvC-M9-y7g" id="MQd-GZ-qWp"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="About" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="QvC-M9-y7g">
|
||||
<window title="About Xclean" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" titlebarAppearsTransparent="YES" titleVisibility="hidden" id="QvC-M9-y7g">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" fullSizeContentView="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="395" height="296"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1177"/>
|
||||
<rect key="contentRect" x="196" y="240" width="277" height="168"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1175"/>
|
||||
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="395" height="296"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="307" height="198"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<visualEffectView appearanceType="vibrantDark" blendingMode="behindWindow" material="windowBackground" state="followsWindowActiveState" translatesAutoresizingMaskIntoConstraints="NO" id="2na-Z2-u9Y">
|
||||
<rect key="frame" x="0.0" y="0.0" width="395" height="296"/>
|
||||
<visualEffectView blendingMode="behindWindow" material="underWindowBackground" state="followsWindowActiveState" translatesAutoresizingMaskIntoConstraints="NO" id="ls5-I3-hMR">
|
||||
<rect key="frame" x="0.0" y="0.0" width="307" height="198"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="H8T-8E-DDN">
|
||||
<rect key="frame" x="20" y="20" width="256" height="256"/>
|
||||
<imageView wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="bkJ-Ud-XM8">
|
||||
<rect key="frame" x="30" y="30" width="128" height="128"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="256" id="HER-vU-ej4"/>
|
||||
<constraint firstAttribute="height" constant="256" id="tEO-yL-v7f"/>
|
||||
<constraint firstAttribute="width" constant="128" id="CSW-JZ-Wa6"/>
|
||||
<constraint firstAttribute="height" constant="128" id="kJV-3v-pYD"/>
|
||||
</constraints>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="NSApplicationIcon" id="6bs-kJ-2MD"/>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="NSApplicationIcon" id="GGX-kf-SmE"/>
|
||||
</imageView>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="eUO-Xh-gcg">
|
||||
<rect key="frame" x="282" y="176" width="95" height="24"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="n4t-G6-Fj5">
|
||||
<font key="font" metaFont="systemThin" size="20"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="version" id="9GC-rX-a5S"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zOn-oh-QdP">
|
||||
<rect key="frame" x="282" y="50" width="95" height="17"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="JEk-lW-tk0">
|
||||
<font key="font" metaFont="systemThin" size="13"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="copyright" id="j3k-9t-5tC"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2ba-9s-ZV8">
|
||||
<rect key="frame" x="282" y="208" width="95" height="48"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Label" id="UGy-b9-cuI">
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="c3B-11-Nnn">
|
||||
<rect key="frame" x="186" y="111" width="93" height="47"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Mhf-3U-WaO">
|
||||
<font key="font" metaFont="systemThin" size="40"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="name" id="OKL-6y-FGO"/>
|
||||
<binding destination="-2" name="value" keyPath="self.name" id="joW-A0-HfH"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yLd-6Z-IaF">
|
||||
<rect key="frame" x="186" y="79" width="50" height="24"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="GPR-R9-Yud">
|
||||
<font key="font" metaFont="systemThin" size="20"/>
|
||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.version" id="zcF-Mv-hcv"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qK4-am-2Hl">
|
||||
<rect key="frame" x="186" y="40" width="36" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="CqC-AJ-UHI">
|
||||
<font key="font" metaFont="systemThin" size="13"/>
|
||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.copyright" id="Q5j-jh-2rr"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="H8T-8E-DDN" firstAttribute="top" secondItem="2na-Z2-u9Y" secondAttribute="top" constant="20" id="3I5-PH-yU3"/>
|
||||
<constraint firstItem="zOn-oh-QdP" firstAttribute="leading" secondItem="eUO-Xh-gcg" secondAttribute="leading" id="9z8-TQ-exV"/>
|
||||
<constraint firstItem="eUO-Xh-gcg" firstAttribute="top" secondItem="2ba-9s-ZV8" secondAttribute="bottom" constant="8" id="Ab9-it-JUm"/>
|
||||
<constraint firstAttribute="trailing" secondItem="zOn-oh-QdP" secondAttribute="trailing" constant="20" id="H1w-13-zMV"/>
|
||||
<constraint firstItem="zOn-oh-QdP" firstAttribute="bottom" secondItem="H8T-8E-DDN" secondAttribute="bottom" constant="-30" id="I3a-5Y-YXv"/>
|
||||
<constraint firstItem="eUO-Xh-gcg" firstAttribute="leading" secondItem="2ba-9s-ZV8" secondAttribute="leading" id="QtV-Me-2JH"/>
|
||||
<constraint firstAttribute="trailing" secondItem="eUO-Xh-gcg" secondAttribute="trailing" constant="20" id="ZzX-cc-IvF"/>
|
||||
<constraint firstAttribute="trailing" secondItem="2ba-9s-ZV8" secondAttribute="trailing" constant="20" id="a49-qe-KTA"/>
|
||||
<constraint firstItem="2ba-9s-ZV8" firstAttribute="top" secondItem="H8T-8E-DDN" secondAttribute="top" constant="20" id="hUd-bj-u1o"/>
|
||||
<constraint firstItem="H8T-8E-DDN" firstAttribute="leading" secondItem="2na-Z2-u9Y" secondAttribute="leading" constant="20" id="qEC-HE-IWz"/>
|
||||
<constraint firstAttribute="bottom" secondItem="H8T-8E-DDN" secondAttribute="bottom" constant="20" id="sib-85-ry4"/>
|
||||
<constraint firstItem="2ba-9s-ZV8" firstAttribute="leading" secondItem="H8T-8E-DDN" secondAttribute="trailing" constant="8" id="zlY-3J-nRY"/>
|
||||
<constraint firstItem="qK4-am-2Hl" firstAttribute="bottom" secondItem="bkJ-Ud-XM8" secondAttribute="bottom" constant="-10" id="4eU-i4-CHR"/>
|
||||
<constraint firstItem="c3B-11-Nnn" firstAttribute="leading" secondItem="bkJ-Ud-XM8" secondAttribute="trailing" constant="30" id="BpG-VA-Nxl"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="yLd-6Z-IaF" secondAttribute="trailing" constant="30" id="IQu-ql-HkC"/>
|
||||
<constraint firstItem="qK4-am-2Hl" firstAttribute="leading" secondItem="c3B-11-Nnn" secondAttribute="leading" id="Yot-mk-hra"/>
|
||||
<constraint firstItem="bkJ-Ud-XM8" firstAttribute="top" secondItem="ls5-I3-hMR" secondAttribute="top" constant="40" id="bpQ-Rd-Kjd"/>
|
||||
<constraint firstItem="yLd-6Z-IaF" firstAttribute="top" secondItem="c3B-11-Nnn" secondAttribute="bottom" constant="8" id="cvA-Hq-TDd"/>
|
||||
<constraint firstItem="bkJ-Ud-XM8" firstAttribute="leading" secondItem="ls5-I3-hMR" secondAttribute="leading" constant="30" id="mLH-C3-hte"/>
|
||||
<constraint firstAttribute="bottom" secondItem="bkJ-Ud-XM8" secondAttribute="bottom" constant="30" id="nEf-eO-eJA"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="c3B-11-Nnn" secondAttribute="trailing" constant="30" id="oqv-O4-gKi"/>
|
||||
<constraint firstItem="c3B-11-Nnn" firstAttribute="top" secondItem="bkJ-Ud-XM8" secondAttribute="top" id="ryd-fl-aVO"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="qK4-am-2Hl" secondAttribute="trailing" constant="30" id="xUl-C7-IqA"/>
|
||||
<constraint firstItem="yLd-6Z-IaF" firstAttribute="leading" secondItem="c3B-11-Nnn" secondAttribute="leading" id="zma-HZ-8Vb"/>
|
||||
</constraints>
|
||||
</visualEffectView>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="2na-Z2-u9Y" firstAttribute="width" secondItem="EiT-Mj-1SZ" secondAttribute="width" id="4dA-8n-C7v"/>
|
||||
<constraint firstItem="2na-Z2-u9Y" firstAttribute="centerY" secondItem="EiT-Mj-1SZ" secondAttribute="centerY" id="O55-qt-7R1"/>
|
||||
<constraint firstItem="2na-Z2-u9Y" firstAttribute="centerX" secondItem="EiT-Mj-1SZ" secondAttribute="centerX" id="dSe-Gv-BQM"/>
|
||||
<constraint firstItem="2na-Z2-u9Y" firstAttribute="height" secondItem="EiT-Mj-1SZ" secondAttribute="height" id="hu6-Xm-VtI"/>
|
||||
<constraint firstItem="ls5-I3-hMR" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" id="O6b-Af-UWg"/>
|
||||
<constraint firstItem="ls5-I3-hMR" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" id="OTa-DV-nY1"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ls5-I3-hMR" secondAttribute="trailing" id="S6O-Rs-Cnd"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ls5-I3-hMR" secondAttribute="bottom" id="hL3-Sx-v9S"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<point key="canvasLocation" x="-53.5" y="-162"/>
|
||||
<point key="canvasLocation" x="37.5" y="147"/>
|
||||
</window>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSApplicationIcon" width="128" height="128"/>
|
||||
<image name="NSApplicationIcon" width="32" height="32"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19162" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19162"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
@@ -15,23 +16,23 @@
|
||||
<window title="Developer Account" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="QvC-M9-y7g">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="579" height="253"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1177"/>
|
||||
<rect key="contentRect" x="196" y="240" width="380" height="316"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="3008" height="1228"/>
|
||||
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="579" height="253"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="316"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="a22-UJ-tuT">
|
||||
<rect key="frame" x="0.0" y="0.0" width="579" height="253"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="316"/>
|
||||
<subviews>
|
||||
<progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" bezeled="NO" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="Qao-Uu-KJq">
|
||||
<rect key="frame" x="274" y="111" width="32" height="32"/>
|
||||
<rect key="frame" x="284" y="142" width="32" height="32"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="animate" keyPath="self.loading" id="MqU-UR-2Fv"/>
|
||||
</connections>
|
||||
</progressIndicator>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MpK-jx-VzM">
|
||||
<rect key="frame" x="217" y="74" width="146" height="17"/>
|
||||
<rect key="frame" x="227" y="106" width="146" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Validating credentials..." id="ss1-SH-70u">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -54,10 +55,10 @@
|
||||
</connections>
|
||||
</customView>
|
||||
<view wantsLayer="YES" translatesAutoresizingMaskIntoConstraints="NO" id="NsU-Ic-SGu">
|
||||
<rect key="frame" x="0.0" y="0.0" width="579" height="253"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="316"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7PZ-Wb-pip">
|
||||
<rect key="frame" x="189" y="203" width="201" height="30"/>
|
||||
<rect key="frame" x="200" y="267" width="201" height="29"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Developer Account" id="iAM-dE-gkd">
|
||||
<font key="font" metaFont="systemThin" size="25"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -65,21 +66,21 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="VVw-Xg-IkG">
|
||||
<rect key="frame" x="12" y="192" width="555" height="5"/>
|
||||
<rect key="frame" x="12" y="256" width="576" height="5"/>
|
||||
</box>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="NPL-u9-5wt">
|
||||
<rect key="frame" x="20" y="85" width="86" height="86"/>
|
||||
<rect key="frame" x="20" y="85" width="150" height="150"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="86" id="kZP-ac-Ymk"/>
|
||||
<constraint firstAttribute="width" constant="86" id="oK7-kG-qoa"/>
|
||||
<constraint firstAttribute="height" constant="150" id="kZP-ac-Ymk"/>
|
||||
<constraint firstAttribute="width" constant="150" id="oK7-kG-qoa"/>
|
||||
</constraints>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="Accounts" id="wZ3-Xa-Unj"/>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="Accounts" id="wZ3-Xa-Unj"/>
|
||||
</imageView>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="uYp-eZ-ccf">
|
||||
<rect key="frame" x="126" y="70" width="433" height="116"/>
|
||||
<rect key="frame" x="170" y="69" width="410" height="181"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1aP-Yq-W83">
|
||||
<rect key="frame" x="18" y="77" width="89" height="17"/>
|
||||
<rect key="frame" x="28" y="143" width="56" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="AppleID:" id="aNg-45-EUW">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -87,7 +88,7 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Omp-wi-GXb">
|
||||
<rect key="frame" x="113" y="74" width="300" height="22"/>
|
||||
<rect key="frame" x="90" y="140" width="300" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="300" id="EVw-XJ-WXh"/>
|
||||
</constraints>
|
||||
@@ -105,7 +106,7 @@
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="awz-8s-w8g">
|
||||
<rect key="frame" x="18" y="45" width="89" height="17"/>
|
||||
<rect key="frame" x="18" y="112" width="66" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Password:" id="pcl-Ub-Bft">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -113,7 +114,7 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<secureTextField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Xey-Nm-kVG">
|
||||
<rect key="frame" x="113" y="42" width="300" height="22"/>
|
||||
<rect key="frame" x="90" y="109" width="300" height="21"/>
|
||||
<secureTextFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" usesSingleLineMode="YES" id="akR-lk-HnN">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -131,7 +132,7 @@
|
||||
</connections>
|
||||
</secureTextField>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="R9Q-HB-RzW">
|
||||
<rect key="frame" x="111" y="18" width="221" height="18"/>
|
||||
<rect key="frame" x="88" y="84" width="225" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Remember password in keychain" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="OMx-SG-lf0">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -140,30 +141,70 @@
|
||||
<binding destination="-2" name="value" keyPath="self.keepInKeychain" id="FDN-KL-VDJ"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ay5-Du-OV8">
|
||||
<rect key="frame" x="25" y="59" width="59" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Provider:" id="A1o-DN-PFh">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oL0-iz-W4Y">
|
||||
<rect key="frame" x="90" y="56" width="300" height="21"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" id="gHp-5g-4pA">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="-2" name="value" keyPath="self.providerShortName" id="wRU-e9-EIN">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="CtI-ZF-hLh">
|
||||
<rect key="frame" x="88" y="20" width="304" height="28"/>
|
||||
<textFieldCell key="cell" controlSize="small" selectable="YES" title="Optional: use this if your Apple ID account is also attached to other iTunes providers." id="uVO-rx-XWl">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="R9Q-HB-RzW" secondAttribute="trailing" constant="103" id="0r4-pv-6PB"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="R9Q-HB-RzW" secondAttribute="trailing" constant="20" id="0r4-pv-6PB"/>
|
||||
<constraint firstItem="CtI-ZF-hLh" firstAttribute="leading" secondItem="oL0-iz-W4Y" secondAttribute="leading" id="2oL-64-yr0"/>
|
||||
<constraint firstItem="oL0-iz-W4Y" firstAttribute="top" secondItem="R9Q-HB-RzW" secondAttribute="bottom" constant="8" symbolic="YES" id="73I-c0-JrD"/>
|
||||
<constraint firstItem="ay5-Du-OV8" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="uYp-eZ-ccf" secondAttribute="leading" constant="20" symbolic="YES" id="8JE-po-At3"/>
|
||||
<constraint firstItem="Xey-Nm-kVG" firstAttribute="top" secondItem="Omp-wi-GXb" secondAttribute="bottom" constant="10" id="E1e-XK-MTa"/>
|
||||
<constraint firstItem="Xey-Nm-kVG" firstAttribute="leading" secondItem="awz-8s-w8g" secondAttribute="trailing" constant="8" id="EVv-Fw-pZH"/>
|
||||
<constraint firstAttribute="bottom" secondItem="R9Q-HB-RzW" secondAttribute="bottom" constant="20" id="FEu-m9-igb"/>
|
||||
<constraint firstItem="Xey-Nm-kVG" firstAttribute="leading" secondItem="Omp-wi-GXb" secondAttribute="leading" id="Fd3-5p-TOc"/>
|
||||
<constraint firstItem="R9Q-HB-RzW" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Xey-Nm-kVG" secondAttribute="leading" id="MJi-aJ-g9U"/>
|
||||
<constraint firstItem="awz-8s-w8g" firstAttribute="leading" secondItem="uYp-eZ-ccf" secondAttribute="leading" constant="20" id="Pup-3F-Z4r"/>
|
||||
<constraint firstItem="oL0-iz-W4Y" firstAttribute="trailing" secondItem="Xey-Nm-kVG" secondAttribute="trailing" id="GOR-tX-VGi"/>
|
||||
<constraint firstItem="ay5-Du-OV8" firstAttribute="centerY" secondItem="oL0-iz-W4Y" secondAttribute="centerY" id="Gzo-Nc-JNL"/>
|
||||
<constraint firstItem="R9Q-HB-RzW" firstAttribute="leading" secondItem="Xey-Nm-kVG" secondAttribute="leading" id="MJi-aJ-g9U"/>
|
||||
<constraint firstItem="awz-8s-w8g" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="uYp-eZ-ccf" secondAttribute="leading" constant="20" id="Pup-3F-Z4r"/>
|
||||
<constraint firstItem="CtI-ZF-hLh" firstAttribute="top" secondItem="oL0-iz-W4Y" secondAttribute="bottom" constant="8" symbolic="YES" id="Pw2-fw-R6r"/>
|
||||
<constraint firstItem="R9Q-HB-RzW" firstAttribute="top" secondItem="Xey-Nm-kVG" secondAttribute="bottom" constant="8" id="W4j-qe-92T"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Omp-wi-GXb" secondAttribute="trailing" constant="20" id="XJ1-Uy-3XR"/>
|
||||
<constraint firstItem="Omp-wi-GXb" firstAttribute="leading" secondItem="1aP-Yq-W83" secondAttribute="trailing" constant="8" id="ah6-3F-2Mf"/>
|
||||
<constraint firstAttribute="trailing" secondItem="CtI-ZF-hLh" secondAttribute="trailing" constant="20" id="bwB-WC-nra"/>
|
||||
<constraint firstAttribute="bottom" secondItem="CtI-ZF-hLh" secondAttribute="bottom" constant="20" id="jlG-TG-nMp"/>
|
||||
<constraint firstItem="Omp-wi-GXb" firstAttribute="top" secondItem="uYp-eZ-ccf" secondAttribute="top" constant="20" id="jzv-a3-0cg"/>
|
||||
<constraint firstItem="1aP-Yq-W83" firstAttribute="leading" secondItem="uYp-eZ-ccf" secondAttribute="leading" constant="20" id="lqc-dV-rG1"/>
|
||||
<constraint firstItem="1aP-Yq-W83" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="uYp-eZ-ccf" secondAttribute="leading" constant="20" id="lqc-dV-rG1"/>
|
||||
<constraint firstItem="oL0-iz-W4Y" firstAttribute="leading" secondItem="ay5-Du-OV8" secondAttribute="trailing" constant="8" symbolic="YES" id="n5j-dM-yiu"/>
|
||||
<constraint firstItem="Xey-Nm-kVG" firstAttribute="trailing" secondItem="Omp-wi-GXb" secondAttribute="trailing" id="tLT-Cd-hiE"/>
|
||||
<constraint firstItem="1aP-Yq-W83" firstAttribute="centerY" secondItem="Omp-wi-GXb" secondAttribute="centerY" id="xLM-DB-woi"/>
|
||||
<constraint firstItem="oL0-iz-W4Y" firstAttribute="leading" secondItem="Xey-Nm-kVG" secondAttribute="leading" id="yNg-DO-bMQ"/>
|
||||
<constraint firstItem="awz-8s-w8g" firstAttribute="centerY" secondItem="Xey-Nm-kVG" secondAttribute="centerY" id="zZM-uD-9kJ"/>
|
||||
</constraints>
|
||||
</customView>
|
||||
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="zrA-uE-xq3">
|
||||
<rect key="frame" x="12" y="59" width="555" height="5"/>
|
||||
<rect key="frame" x="12" y="58" width="576" height="5"/>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uCG-EV-sey">
|
||||
<rect key="frame" x="506" y="13" width="59" height="32"/>
|
||||
<rect key="frame" x="534" y="13" width="53" height="32"/>
|
||||
<buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Ahu-P9-a1J">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -176,7 +217,7 @@ DQ
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fGw-yj-aTk">
|
||||
<rect key="frame" x="424" y="13" width="82" height="32"/>
|
||||
<rect key="frame" x="460" y="13" width="76" height="32"/>
|
||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="WbE-Xt-xvz">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -192,7 +233,7 @@ Gw
|
||||
<constraints>
|
||||
<constraint firstItem="VVw-Xg-IkG" firstAttribute="top" secondItem="7PZ-Wb-pip" secondAttribute="bottom" constant="8" id="2Yd-2Q-V2M"/>
|
||||
<constraint firstItem="7PZ-Wb-pip" firstAttribute="centerX" secondItem="NsU-Ic-SGu" secondAttribute="centerX" id="CCT-zY-jhM"/>
|
||||
<constraint firstItem="uYp-eZ-ccf" firstAttribute="leading" secondItem="NPL-u9-5wt" secondAttribute="trailing" constant="20" id="CXR-QV-Wrr"/>
|
||||
<constraint firstItem="uYp-eZ-ccf" firstAttribute="leading" secondItem="NPL-u9-5wt" secondAttribute="trailing" id="CXR-QV-Wrr"/>
|
||||
<constraint firstAttribute="trailing" secondItem="VVw-Xg-IkG" secondAttribute="trailing" constant="12" id="DHp-8P-rqS"/>
|
||||
<constraint firstItem="NPL-u9-5wt" firstAttribute="leading" secondItem="NsU-Ic-SGu" secondAttribute="leading" constant="20" id="HmQ-nE-D8g"/>
|
||||
<constraint firstItem="VVw-Xg-IkG" firstAttribute="leading" secondItem="NsU-Ic-SGu" secondAttribute="leading" constant="12" id="Jsw-ZW-s8y"/>
|
||||
@@ -226,7 +267,7 @@ Gw
|
||||
<constraint firstItem="NsU-Ic-SGu" firstAttribute="width" secondItem="EiT-Mj-1SZ" secondAttribute="width" id="ykL-cN-uKZ"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<point key="canvasLocation" x="177.5" y="-190.5"/>
|
||||
<point key="canvasLocation" x="78" y="-191"/>
|
||||
</window>
|
||||
</objects>
|
||||
<resources>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17506" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17506"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
@@ -14,20 +14,20 @@
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customView id="c22-O7-iKe">
|
||||
<rect key="frame" x="0.0" y="0.0" width="791" height="589"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="786" height="554"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="y0e-GG-izO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="791" height="589"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="786" height="554"/>
|
||||
<subviews>
|
||||
<progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" bezeled="NO" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="arN-Pa-Zux">
|
||||
<rect key="frame" x="380" y="279" width="32" height="32"/>
|
||||
<rect key="frame" x="377" y="261" width="32" height="32"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="animate" keyPath="loading" id="4Sy-Cj-3UZ"/>
|
||||
</connections>
|
||||
</progressIndicator>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ihm-Ui-xRh">
|
||||
<rect key="frame" x="290" y="242" width="211" height="17"/>
|
||||
<rect key="frame" x="288" y="225" width="211" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Getting latest data... Please wait..." id="S2v-Df-W0w">
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -50,10 +50,10 @@
|
||||
</connections>
|
||||
</customView>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="4gW-Wz-KbZ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="791" height="589"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="786" height="554"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3Np-5q-xRo">
|
||||
<rect key="frame" x="287" y="443" width="217" height="36"/>
|
||||
<rect key="frame" x="284" y="425" width="218" height="35"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="No Data Available" id="WDl-1p-B7p">
|
||||
<font key="font" metaFont="systemThin" size="30"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -61,7 +61,7 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="qKQ-Pd-1H7">
|
||||
<rect key="frame" x="268" y="167" width="256" height="256"/>
|
||||
<rect key="frame" x="265" y="149" width="256" height="256"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="256" id="EFm-8K-mFN"/>
|
||||
<constraint firstAttribute="width" constant="256" id="dy3-Ix-Ru7"/>
|
||||
@@ -69,7 +69,7 @@
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="NSApplicationIcon" id="gLF-aJ-vlK"/>
|
||||
</imageView>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4GV-g7-iLV">
|
||||
<rect key="frame" x="342" y="119" width="107" height="32"/>
|
||||
<rect key="frame" x="344" y="102" width="98" height="32"/>
|
||||
<buttonCell key="cell" type="push" title="Refresh" bezelStyle="rounded" image="NSRefreshFreestandingTemplate" imagePosition="leading" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8Xy-jP-dKA">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -101,14 +101,14 @@
|
||||
</connections>
|
||||
</customView>
|
||||
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="32" horizontalPageScroll="10" verticalLineScroll="32" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YfE-Rw-vXm">
|
||||
<rect key="frame" x="0.0" y="0.0" width="791" height="589"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="786" height="554"/>
|
||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="jMg-EM-3u0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="791" height="589"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="786" height="554"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowHeight="30" rowSizeStyle="automatic" headerView="tru-nL-4Nv" viewBased="YES" id="oOe-qW-nZ3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="791" height="564"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="786" height="529"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<tableViewGridLines key="gridStyleMask" horizontal="YES"/>
|
||||
@@ -116,7 +116,6 @@
|
||||
<tableColumns>
|
||||
<tableColumn width="275" minWidth="40" maxWidth="1000" id="Eln-m9-G0Q">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="UUID">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
@@ -129,7 +128,7 @@
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="9Vq-2S-COa">
|
||||
<rect key="frame" x="1" y="1" width="275" height="30"/>
|
||||
<rect key="frame" x="11" y="1" width="280" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="B57-Ql-AvZ">
|
||||
@@ -159,9 +158,9 @@
|
||||
</connections>
|
||||
</imageView>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Ab2-iB-rRT">
|
||||
<rect key="frame" x="24" y="7" width="248" height="17"/>
|
||||
<rect key="frame" x="24" y="9" width="253" height="13"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" sendsActionOnEndEditing="YES" title="Table View Cell" id="Wh1-g4-y03">
|
||||
<font key="font" metaFont="fixedUser" size="11"/>
|
||||
<font key="font" usesAppearanceFont="YES"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
@@ -187,7 +186,6 @@
|
||||
</tableColumn>
|
||||
<tableColumn width="150" minWidth="40" maxWidth="1000" id="A29-w4-mOr">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Date">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
@@ -200,7 +198,7 @@
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="0Op-pU-bvM">
|
||||
<rect key="frame" x="279" y="1" width="150" height="30"/>
|
||||
<rect key="frame" x="294" y="1" width="150" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="09o-ka-h6V">
|
||||
@@ -229,7 +227,6 @@
|
||||
</tableColumn>
|
||||
<tableColumn width="50" minWidth="40" maxWidth="1000" id="mub-zn-Ehu">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Status">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
@@ -242,7 +239,7 @@
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="mIa-xm-IaL">
|
||||
<rect key="frame" x="432" y="1" width="50" height="30"/>
|
||||
<rect key="frame" x="447" y="1" width="50" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="rTh-gx-u7f">
|
||||
@@ -268,9 +265,8 @@
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
<tableColumn width="304" minWidth="40" maxWidth="1000" id="4kz-5j-cdK">
|
||||
<tableColumn width="270" minWidth="40" maxWidth="1000" id="4kz-5j-cdK">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Message">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
@@ -283,11 +279,11 @@
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="a0C-v9-jpd">
|
||||
<rect key="frame" x="485" y="1" width="304" height="30"/>
|
||||
<rect key="frame" x="500" y="1" width="274" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Htf-9O-HfB">
|
||||
<rect key="frame" x="0.0" y="8" width="270" height="14"/>
|
||||
<rect key="frame" x="0.0" y="8" width="240" height="14"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" sendsActionOnEndEditing="YES" title="Table View Cell" id="qAC-Pe-dzF">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -298,7 +294,7 @@
|
||||
</connections>
|
||||
</textField>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="9LR-mA-ejX">
|
||||
<rect key="frame" x="278" y="7" width="16" height="16"/>
|
||||
<rect key="frame" x="248" y="5" width="16.5" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="16" id="oce-eh-do7"/>
|
||||
<constraint firstAttribute="height" constant="16" id="pVl-48-3rY"/>
|
||||
@@ -351,7 +347,7 @@
|
||||
</subviews>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="qkh-yU-UA0">
|
||||
<rect key="frame" x="0.0" y="198" width="676" height="16"/>
|
||||
<rect key="frame" x="0.0" y="548" width="786" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="x2G-CM-hRQ">
|
||||
@@ -359,7 +355,7 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<tableHeaderView key="headerView" wantsLayer="YES" id="tru-nL-4Nv">
|
||||
<rect key="frame" x="0.0" y="0.0" width="791" height="25"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="786" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</tableHeaderView>
|
||||
<connections>
|
||||
@@ -377,20 +373,20 @@
|
||||
</scrollView>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="YfE-Rw-vXm" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="2AA-KP-qpA"/>
|
||||
<constraint firstItem="y0e-GG-izO" firstAttribute="height" secondItem="c22-O7-iKe" secondAttribute="height" id="85b-vY-aAN"/>
|
||||
<constraint firstItem="YfE-Rw-vXm" firstAttribute="height" secondItem="c22-O7-iKe" secondAttribute="height" id="D9R-3s-7Er"/>
|
||||
<constraint firstAttribute="bottom" secondItem="YfE-Rw-vXm" secondAttribute="bottom" id="92V-pH-tmB"/>
|
||||
<constraint firstItem="4gW-Wz-KbZ" firstAttribute="centerX" secondItem="c22-O7-iKe" secondAttribute="centerX" id="JNR-aR-bQH"/>
|
||||
<constraint firstItem="YfE-Rw-vXm" firstAttribute="width" secondItem="c22-O7-iKe" secondAttribute="width" id="RPG-qq-pLL"/>
|
||||
<constraint firstItem="4gW-Wz-KbZ" firstAttribute="width" secondItem="c22-O7-iKe" secondAttribute="width" id="aWP-4w-t98"/>
|
||||
<constraint firstItem="4gW-Wz-KbZ" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="bsR-hV-zQN"/>
|
||||
<constraint firstItem="4gW-Wz-KbZ" firstAttribute="height" secondItem="c22-O7-iKe" secondAttribute="height" id="fOP-mC-eEj"/>
|
||||
<constraint firstItem="y0e-GG-izO" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="jBd-TP-tQr"/>
|
||||
<constraint firstAttribute="trailing" secondItem="YfE-Rw-vXm" secondAttribute="trailing" id="kTD-DU-5Qq"/>
|
||||
<constraint firstItem="y0e-GG-izO" firstAttribute="centerX" secondItem="c22-O7-iKe" secondAttribute="centerX" id="q1m-8K-XeG"/>
|
||||
<constraint firstItem="YfE-Rw-vXm" firstAttribute="centerX" secondItem="c22-O7-iKe" secondAttribute="centerX" id="wGP-sd-B5Z"/>
|
||||
<constraint firstItem="YfE-Rw-vXm" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="sxE-w8-Ief"/>
|
||||
<constraint firstItem="YfE-Rw-vXm" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="u9h-xa-DNR"/>
|
||||
<constraint firstItem="y0e-GG-izO" firstAttribute="width" secondItem="c22-O7-iKe" secondAttribute="width" id="zd5-MY-JRk"/>
|
||||
</constraints>
|
||||
<point key="canvasLocation" x="75.5" y="79.5"/>
|
||||
<point key="canvasLocation" x="75" y="-224"/>
|
||||
</customView>
|
||||
<arrayController selectsInsertedObjects="NO" avoidsEmptySelection="NO" automaticallyRearrangesObjects="YES" id="scX-MD-094">
|
||||
<connections>
|
||||
@@ -399,9 +395,9 @@
|
||||
</arrayController>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSApplicationIcon" width="128" height="128"/>
|
||||
<image name="NSQuickLookTemplate" width="19" height="12"/>
|
||||
<image name="NSRefreshFreestandingTemplate" width="14" height="14"/>
|
||||
<image name="NSApplicationIcon" width="32" height="32"/>
|
||||
<image name="NSQuickLookTemplate" width="21" height="13"/>
|
||||
<image name="NSRefreshFreestandingTemplate" width="15" height="15"/>
|
||||
<image name="NSStatusAvailable" width="16" height="16"/>
|
||||
<image name="NSStatusUnavailable" width="16" height="16"/>
|
||||
</resources>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17506" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17506"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
@@ -14,11 +14,11 @@
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Notarize" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="MainWindow" animationBehavior="default" titlebarAppearsTransparent="YES" titleVisibility="hidden" id="QvC-M9-y7g">
|
||||
<window title="Notarize" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="MainWindow" animationBehavior="default" id="QvC-M9-y7g">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" fullSizeContentView="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="1000" height="500"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1177"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1175"/>
|
||||
<value key="minSize" type="size" width="1000" height="500"/>
|
||||
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1000" height="500"/>
|
||||
@@ -28,14 +28,14 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="1000" height="500"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cER-yh-PyD">
|
||||
<rect key="frame" x="374" y="398" width="252" height="36"/>
|
||||
<rect key="frame" x="374" y="398" width="252" height="35"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="altool is not available" id="W46-Qb-BLg">
|
||||
<font key="font" metaFont="systemThin" size="30"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="osz-bR-rMP">
|
||||
<imageView wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="osz-bR-rMP">
|
||||
<rect key="frame" x="372" y="122" width="256" height="256"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="256" id="lVq-xd-SDe"/>
|
||||
@@ -44,15 +44,15 @@
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="NSApplicationIcon" id="pth-35-ZJs"/>
|
||||
</imageView>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="a5i-eI-2yO">
|
||||
<rect key="frame" x="343" y="85" width="315" height="17"/>
|
||||
<rect key="frame" x="346" y="86" width="308" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="Please install latest version of Xcode and try again..." id="jEq-R4-Isq">
|
||||
<font key="font" metaFont="systemThin" size="13"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="caJ-Is-8xp">
|
||||
<rect key="frame" x="467" y="37" width="66" height="32"/>
|
||||
<button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="caJ-Is-8xp">
|
||||
<rect key="frame" x="470" y="39" width="60" height="32"/>
|
||||
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Gp0-Bb-tZO">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -80,28 +80,27 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="1000" height="500"/>
|
||||
<subviews>
|
||||
<customView id="pXY-N9-ZRU">
|
||||
<rect key="frame" x="0.0" y="0.0" width="200" height="500"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="220" height="500"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<visualEffectView appearanceType="vibrantDark" blendingMode="behindWindow" material="underWindowBackground" state="followsWindowActiveState" translatesAutoresizingMaskIntoConstraints="NO" id="njS-QH-WfR">
|
||||
<rect key="frame" x="0.0" y="0.0" width="200" height="500"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="220" height="500"/>
|
||||
<subviews>
|
||||
<scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="44" horizontalPageScroll="10" verticalLineScroll="44" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6s6-Zi-U9w">
|
||||
<rect key="frame" x="0.0" y="0.0" width="200" height="470"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="220" height="470"/>
|
||||
<clipView key="contentView" drawsBackground="NO" id="Qpm-Cm-Fke">
|
||||
<rect key="frame" x="0.0" y="0.0" width="200" height="470"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="220" height="470"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="42" rowSizeStyle="automatic" viewBased="YES" id="13n-Bw-pPy">
|
||||
<rect key="frame" x="0.0" y="0.0" width="200" height="470"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="220" height="470"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="197" minWidth="40" maxWidth="1000" id="dGh-q6-bLv">
|
||||
<tableColumn width="188" minWidth="40" maxWidth="1000" id="dGh-q6-bLv">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
@@ -113,10 +112,10 @@
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView id="HYN-0l-Rb9">
|
||||
<rect key="frame" x="1" y="1" width="197" height="42"/>
|
||||
<rect key="frame" x="11" y="1" width="197" height="42"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="o1R-Ox-0Av">
|
||||
<imageView wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="o1R-Ox-0Av">
|
||||
<rect key="frame" x="5" y="5" width="32" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="32" id="dm3-qa-Fho"/>
|
||||
@@ -125,7 +124,7 @@
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="Accounts" id="wMV-10-rc2"/>
|
||||
</imageView>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="clD-pW-mXY">
|
||||
<rect key="frame" x="40" y="13" width="133" height="17"/>
|
||||
<rect key="frame" x="40" y="13" width="133" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="IdH-II-0F8">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
@@ -135,7 +134,7 @@
|
||||
<binding destination="HYN-0l-Rb9" name="value" keyPath="objectValue.username" id="R7L-U5-8iz"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="vVa-vh-gr4">
|
||||
<imageView wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="vVa-vh-gr4">
|
||||
<rect key="frame" x="176" y="13" width="16" height="16"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="16" id="F9F-TH-YUP"/>
|
||||
@@ -185,8 +184,8 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KHT-Hm-7By">
|
||||
<rect key="frame" x="162" y="-1" width="19" height="21"/>
|
||||
<button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KHT-Hm-7By">
|
||||
<rect key="frame" x="182" y="-1" width="19" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="19" id="EcL-XK-5sH"/>
|
||||
<constraint firstAttribute="width" constant="19" id="xln-pD-rc5"/>
|
||||
@@ -199,8 +198,8 @@
|
||||
<action selector="addAccount:" target="-2" id="VfW-DT-J3H"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DSc-zQ-Ozj">
|
||||
<rect key="frame" x="181" y="-1" width="19" height="21"/>
|
||||
<button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DSc-zQ-Ozj">
|
||||
<rect key="frame" x="201" y="-1" width="19" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="19" id="UOY-oY-XMH"/>
|
||||
<constraint firstAttribute="width" constant="19" id="huj-mW-syx"/>
|
||||
@@ -235,11 +234,11 @@
|
||||
</constraints>
|
||||
</customView>
|
||||
<customView id="rtG-3L-X4C">
|
||||
<rect key="frame" x="201" y="0.0" width="799" height="500"/>
|
||||
<rect key="frame" x="221" y="0.0" width="779" height="500"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="LaH-3W-s0y">
|
||||
<rect key="frame" x="272" y="122" width="256" height="256"/>
|
||||
<rect key="frame" x="262" y="122" width="256" height="256"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="256" id="30m-Zb-xZi"/>
|
||||
<constraint firstAttribute="height" constant="256" id="xSA-4x-iZN"/>
|
||||
@@ -254,7 +253,7 @@
|
||||
</connections>
|
||||
</imageView>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="EvW-Vu-3hB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="799" height="500"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="779" height="500"/>
|
||||
<connections>
|
||||
<binding destination="-2" name="hidden" keyPath="self.controller" id="2yG-pe-Lq0">
|
||||
<dictionary key="options">
|
||||
@@ -309,9 +308,9 @@
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="Accounts" width="512" height="512"/>
|
||||
<image name="NSAddTemplate" width="11" height="11"/>
|
||||
<image name="NSApplicationIcon" width="128" height="128"/>
|
||||
<image name="NSRemoveTemplate" width="11" height="11"/>
|
||||
<image name="NSAddTemplate" width="14" height="13"/>
|
||||
<image name="NSApplicationIcon" width="32" height="32"/>
|
||||
<image name="NSRemoveTemplate" width="14" height="4"/>
|
||||
<image name="NSStatusAvailable" width="16" height="16"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
Binary file not shown.
@@ -1,14 +1,12 @@
|
||||
Notarize
|
||||
========
|
||||
|
||||
[](https://travis-ci.org/macmade/Notarize)
|
||||
[](https://github.com/macmade/Notarize/issues)
|
||||

|
||||

|
||||
[](https://twitter.com/macmade)
|
||||
[](https://patreon.com/macmade)
|
||||
[](https://www.gratipay.com/macmade)
|
||||
[](https://paypal.me/xslabs)
|
||||
[](https://github.com/macmade/Notarize/actions/workflows/ci-mac.yaml)
|
||||
[](https://github.com/macmade/Notarize/issues)
|
||||

|
||||

|
||||
[](https://twitter.com/macmade)
|
||||
[](https://github.com/sponsors/macmade)
|
||||
|
||||
### About
|
||||
|
||||
|
||||
+1
-1
Submodule Submodules/GitHubUpdates updated: 0567ebdc56...8dfeec734c
+1
-1
Submodule Submodules/xcconfig updated: 070b41109d...2759045e0b
Reference in New Issue
Block a user