Compare commits
No commits in common. "b9e359ba835e11f0d0c533e0b321a23fd3493a7e" and "377b5f5c8566ca64d0af45fba128e6c159e108fb" have entirely different histories.
b9e359ba83
...
377b5f5c85
|
@ -7,9 +7,3 @@
|
||||||
[submodule "Gifu"]
|
[submodule "Gifu"]
|
||||||
path = Gifu
|
path = Gifu
|
||||||
url = git://github.com/kaishin/Gifu.git
|
url = git://github.com/kaishin/Gifu.git
|
||||||
[submodule "Embassy"]
|
|
||||||
path = Embassy
|
|
||||||
url = https://github.com/envoy/Embassy.git
|
|
||||||
[submodule "Ambassador"]
|
|
||||||
path = Ambassador
|
|
||||||
url = https://github.com/envoy/Ambassador.git
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 4fe264af51e0dd7228486c604750909e368241a7
|
|
Binary file not shown.
1
Embassy
1
Embassy
|
@ -1 +0,0 @@
|
||||||
Subproject commit 189436100c00efbf5fb2653fe7972a9371db0a91
|
|
|
@ -114,9 +114,6 @@
|
||||||
D64F80E2215875CC00BEF393 /* XCBActionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64F80E1215875CC00BEF393 /* XCBActionType.swift */; };
|
D64F80E2215875CC00BEF393 /* XCBActionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64F80E1215875CC00BEF393 /* XCBActionType.swift */; };
|
||||||
D6538945214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6538944214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift */; };
|
D6538945214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6538944214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift */; };
|
||||||
D65A37F321472F300087646E /* SwiftSoup.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6BED16E212663DA00F02DA0 /* SwiftSoup.framework */; };
|
D65A37F321472F300087646E /* SwiftSoup.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6BED16E212663DA00F02DA0 /* SwiftSoup.framework */; };
|
||||||
D65F613423AEAB6600F3CFD3 /* OnboardingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D65F613323AEAB6600F3CFD3 /* OnboardingTests.swift */; };
|
|
||||||
D65F613623AFD65900F3CFD3 /* Ambassador.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D65F613523AFD65900F3CFD3 /* Ambassador.framework */; };
|
|
||||||
D65F613823AFD65D00F3CFD3 /* Embassy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D65F613723AFD65D00F3CFD3 /* Embassy.framework */; };
|
|
||||||
D663625D2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D663625C2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib */; };
|
D663625D2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D663625C2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib */; };
|
||||||
D663625F2135C75500C9CBA2 /* ConversationMainStatusTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D663625E2135C75500C9CBA2 /* ConversationMainStatusTableViewCell.swift */; };
|
D663625F2135C75500C9CBA2 /* ConversationMainStatusTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D663625E2135C75500C9CBA2 /* ConversationMainStatusTableViewCell.swift */; };
|
||||||
D663626221360B1900C9CBA2 /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = D663626121360B1900C9CBA2 /* Preferences.swift */; };
|
D663626221360B1900C9CBA2 /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = D663626121360B1900C9CBA2 /* Preferences.swift */; };
|
||||||
|
@ -394,11 +391,6 @@
|
||||||
D64D0AB02128D9AE005A6F37 /* OnboardingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewController.swift; sourceTree = "<group>"; };
|
D64D0AB02128D9AE005A6F37 /* OnboardingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewController.swift; sourceTree = "<group>"; };
|
||||||
D64F80E1215875CC00BEF393 /* XCBActionType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCBActionType.swift; sourceTree = "<group>"; };
|
D64F80E1215875CC00BEF393 /* XCBActionType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCBActionType.swift; sourceTree = "<group>"; };
|
||||||
D6538944214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewSwipeActionProvider.swift; sourceTree = "<group>"; };
|
D6538944214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewSwipeActionProvider.swift; sourceTree = "<group>"; };
|
||||||
D65F612D23AE990C00F3CFD3 /* Embassy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Embassy.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
D65F613023AE99E000F3CFD3 /* Ambassador.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Ambassador.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
D65F613323AEAB6600F3CFD3 /* OnboardingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTests.swift; sourceTree = "<group>"; };
|
|
||||||
D65F613523AFD65900F3CFD3 /* Ambassador.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Ambassador.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
D65F613723AFD65D00F3CFD3 /* Embassy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Embassy.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
D663625C2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ConversationMainStatusTableViewCell.xib; sourceTree = "<group>"; };
|
D663625C2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ConversationMainStatusTableViewCell.xib; sourceTree = "<group>"; };
|
||||||
D663625E2135C75500C9CBA2 /* ConversationMainStatusTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConversationMainStatusTableViewCell.swift; sourceTree = "<group>"; };
|
D663625E2135C75500C9CBA2 /* ConversationMainStatusTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConversationMainStatusTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
D663626121360B1900C9CBA2 /* Preferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = "<group>"; };
|
D663626121360B1900C9CBA2 /* Preferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = "<group>"; };
|
||||||
|
@ -509,7 +501,6 @@
|
||||||
D6F1F84C2193B56E00F5FE67 /* Cache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cache.swift; sourceTree = "<group>"; };
|
D6F1F84C2193B56E00F5FE67 /* Cache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cache.swift; sourceTree = "<group>"; };
|
||||||
D6F953EB212519E700CF0F2B /* TimelineTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineTableViewController.swift; sourceTree = "<group>"; };
|
D6F953EB212519E700CF0F2B /* TimelineTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineTableViewController.swift; sourceTree = "<group>"; };
|
||||||
D6F953EF21251A2900CF0F2B /* MastodonController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonController.swift; sourceTree = "<group>"; };
|
D6F953EF21251A2900CF0F2B /* MastodonController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonController.swift; sourceTree = "<group>"; };
|
||||||
D6F98BD523AE951F008A4DAC /* Swifter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Swifter.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -539,8 +530,6 @@
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
D65F613823AFD65D00F3CFD3 /* Embassy.framework in Frameworks */,
|
|
||||||
D65F613623AFD65900F3CFD3 /* Ambassador.framework in Frameworks */,
|
|
||||||
D60A549221ED515800F1F87C /* GMImagePicker.framework in Frameworks */,
|
D60A549221ED515800F1F87C /* GMImagePicker.framework in Frameworks */,
|
||||||
D61099C02144B0CC00432DC2 /* Pachyderm.framework in Frameworks */,
|
D61099C02144B0CC00432DC2 /* Pachyderm.framework in Frameworks */,
|
||||||
D65A37F321472F300087646E /* SwiftSoup.framework in Frameworks */,
|
D65A37F321472F300087646E /* SwiftSoup.framework in Frameworks */,
|
||||||
|
@ -958,11 +947,6 @@
|
||||||
D65A37F221472F300087646E /* Frameworks */ = {
|
D65A37F221472F300087646E /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
D65F613723AFD65D00F3CFD3 /* Embassy.framework */,
|
|
||||||
D65F613523AFD65900F3CFD3 /* Ambassador.framework */,
|
|
||||||
D65F613023AE99E000F3CFD3 /* Ambassador.framework */,
|
|
||||||
D65F612D23AE990C00F3CFD3 /* Embassy.framework */,
|
|
||||||
D6F98BD523AE951F008A4DAC /* Swifter.framework */,
|
|
||||||
);
|
);
|
||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1275,7 +1259,6 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
D6D4DDEF212518A200E1C4BB /* TuskerUITests.swift */,
|
D6D4DDEF212518A200E1C4BB /* TuskerUITests.swift */,
|
||||||
D65F613323AEAB6600F3CFD3 /* OnboardingTests.swift */,
|
|
||||||
D6D4DDF1212518A200E1C4BB /* Info.plist */,
|
D6D4DDF1212518A200E1C4BB /* Info.plist */,
|
||||||
);
|
);
|
||||||
path = TuskerUITests;
|
path = TuskerUITests;
|
||||||
|
@ -1388,7 +1371,6 @@
|
||||||
D6D4DDC9212518A000E1C4BB /* Frameworks */,
|
D6D4DDC9212518A000E1C4BB /* Frameworks */,
|
||||||
D6D4DDCA212518A000E1C4BB /* Resources */,
|
D6D4DDCA212518A000E1C4BB /* Resources */,
|
||||||
D6F953E52125197500CF0F2B /* Embed Frameworks */,
|
D6F953E52125197500CF0F2B /* Embed Frameworks */,
|
||||||
D65F612C23AE957600F3CFD3 /* Embed debug-only frameworks */,
|
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
|
@ -1433,8 +1415,6 @@
|
||||||
D6D4DDED212518A200E1C4BB /* PBXTargetDependency */,
|
D6D4DDED212518A200E1C4BB /* PBXTargetDependency */,
|
||||||
);
|
);
|
||||||
name = TuskerUITests;
|
name = TuskerUITests;
|
||||||
packageProductDependencies = (
|
|
||||||
);
|
|
||||||
productName = TuskerUITests;
|
productName = TuskerUITests;
|
||||||
productReference = D6D4DDEB212518A200E1C4BB /* TuskerUITests.xctest */;
|
productReference = D6D4DDEB212518A200E1C4BB /* TuskerUITests.xctest */;
|
||||||
productType = "com.apple.product-type.bundle.ui-testing";
|
productType = "com.apple.product-type.bundle.ui-testing";
|
||||||
|
@ -1492,8 +1472,6 @@
|
||||||
ca,
|
ca,
|
||||||
);
|
);
|
||||||
mainGroup = D6D4DDC3212518A000E1C4BB;
|
mainGroup = D6D4DDC3212518A000E1C4BB;
|
||||||
packageReferences = (
|
|
||||||
);
|
|
||||||
productRefGroup = D6D4DDCD212518A000E1C4BB /* Products */;
|
productRefGroup = D6D4DDCD212518A000E1C4BB /* Products */;
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
|
@ -1586,31 +1564,6 @@
|
||||||
};
|
};
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
|
||||||
D65F612C23AE957600F3CFD3 /* Embed debug-only frameworks */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputFileListPaths = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
"${BUILT_PRODUCTS_DIR}/Embassy.framework",
|
|
||||||
"${BUILT_PRODUCTS_DIR}/Ambassador.framework",
|
|
||||||
);
|
|
||||||
name = "Embed debug-only frameworks";
|
|
||||||
outputFileListPaths = (
|
|
||||||
);
|
|
||||||
outputPaths = (
|
|
||||||
"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Embassy.framework",
|
|
||||||
"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Ambassador.framework",
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "if [ \"${CONFIGURATION}\" == \"Debug\" ]; then\n echo \"Embedding ${SCRIPT_INPUT_FILE_0}\"\n cp -R $SCRIPT_INPUT_FILE_0 $SCRIPT_OUTPUT_FILE_0\n codesign --force --verbose --sign $EXPANDED_CODE_SIGN_IDENTITY $SCRIPT_OUTPUT_FILE_0\n \n echo \"Embedding ${SCRIPT_INPUT_FILE_1}\"\n cp -R $SCRIPT_INPUT_FILE_1 $SCRIPT_OUTPUT_FILE_1\n codesign --force --verbose --sign $EXPANDED_CODE_SIGN_IDENTITY $SCRIPT_OUTPUT_FILE_1\nelse\n echo \"Skipping embedding debug frameworks\"\nfi\n";
|
|
||||||
};
|
|
||||||
/* End PBXShellScriptBuildPhase section */
|
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
D60A548721ED515800F1F87C /* Sources */ = {
|
D60A548721ED515800F1F87C /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
|
@ -1811,7 +1764,6 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
D65F613423AEAB6600F3CFD3 /* OnboardingTests.swift in Sources */,
|
|
||||||
D6D4DDF0212518A200E1C4BB /* TuskerUITests.swift in Sources */,
|
D6D4DDF0212518A200E1C4BB /* TuskerUITests.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -2214,7 +2166,6 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_LDFLAGS = "";
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = net.shadowfacts.Tusker;
|
PRODUCT_BUNDLE_IDENTIFIER = net.shadowfacts.Tusker;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1020"
|
LastUpgradeVersion = "1020"
|
||||||
version = "1.7">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
buildImplicitDependencies = "YES">
|
buildImplicitDependencies = "YES">
|
||||||
|
@ -27,15 +27,6 @@
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
<MacroExpansion>
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "D6D4DDCB212518A000E1C4BB"
|
|
||||||
BuildableName = "Tusker.app"
|
|
||||||
BlueprintName = "Tusker"
|
|
||||||
ReferencedContainer = "container:Tusker.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</MacroExpansion>
|
|
||||||
<Testables>
|
<Testables>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
|
@ -56,9 +47,6 @@
|
||||||
BlueprintName = "TuskerUITests"
|
BlueprintName = "TuskerUITests"
|
||||||
ReferencedContainer = "container:Tusker.xcodeproj">
|
ReferencedContainer = "container:Tusker.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
<DeviceAppData
|
|
||||||
resolvedPath = "../BlankSlate.xcappdata">
|
|
||||||
</DeviceAppData>
|
|
||||||
</TestableReference>
|
</TestableReference>
|
||||||
<TestableReference
|
<TestableReference
|
||||||
skipped = "NO">
|
skipped = "NO">
|
||||||
|
@ -71,6 +59,17 @@
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</TestableReference>
|
</TestableReference>
|
||||||
</Testables>
|
</Testables>
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "D6D4DDCB212518A000E1C4BB"
|
||||||
|
BuildableName = "Tusker.app"
|
||||||
|
BlueprintName = "Tusker"
|
||||||
|
ReferencedContainer = "container:Tusker.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
|
@ -92,6 +91,8 @@
|
||||||
ReferencedContainer = "container:Tusker.xcodeproj">
|
ReferencedContainer = "container:Tusker.xcodeproj">
|
||||||
</BuildableReference>
|
</BuildableReference>
|
||||||
</BuildableProductRunnable>
|
</BuildableProductRunnable>
|
||||||
|
<AdditionalOptions>
|
||||||
|
</AdditionalOptions>
|
||||||
</LaunchAction>
|
</LaunchAction>
|
||||||
<ProfileAction
|
<ProfileAction
|
||||||
buildConfiguration = "Release"
|
buildConfiguration = "Release"
|
||||||
|
|
|
@ -4,9 +4,6 @@
|
||||||
<FileRef
|
<FileRef
|
||||||
location = "container:Tusker.xcodeproj">
|
location = "container:Tusker.xcodeproj">
|
||||||
</FileRef>
|
</FileRef>
|
||||||
<FileRef
|
|
||||||
location = "group:BlankSlate.xcappdata">
|
|
||||||
</FileRef>
|
|
||||||
<FileRef
|
<FileRef
|
||||||
location = "group:Cache/Cache.xcodeproj">
|
location = "group:Cache/Cache.xcodeproj">
|
||||||
</FileRef>
|
</FileRef>
|
||||||
|
@ -16,10 +13,4 @@
|
||||||
<FileRef
|
<FileRef
|
||||||
location = "group:Gifu/Gifu.xcodeproj">
|
location = "group:Gifu/Gifu.xcodeproj">
|
||||||
</FileRef>
|
</FileRef>
|
||||||
<FileRef
|
|
||||||
location = "group:Embassy/Embassy.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
<FileRef
|
|
||||||
location = "group:Ambassador/Ambassador.xcodeproj">
|
|
||||||
</FileRef>
|
|
||||||
</Workspace>
|
</Workspace>
|
||||||
|
|
|
@ -26,9 +26,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
|
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(onUserLoggedOut), name: .userLoggedOut, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(onUserLoggedOut), name: .userLoggedOut, object: nil)
|
||||||
|
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(themePrefChanged), name: .themePreferenceChanged, object: nil)
|
|
||||||
themePrefChanged()
|
|
||||||
|
|
||||||
window!.makeKeyAndVisible()
|
window!.makeKeyAndVisible()
|
||||||
|
|
||||||
if let shortcutItem = launchOptions?[.shortcutItem] as? UIApplicationShortcutItem {
|
if let shortcutItem = launchOptions?[.shortcutItem] as? UIApplicationShortcutItem {
|
||||||
|
@ -112,10 +109,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
@objc func onUserLoggedOut() {
|
@objc func onUserLoggedOut() {
|
||||||
showOnboardingUI()
|
showOnboardingUI()
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func themePrefChanged() {
|
|
||||||
window?.overrideUserInterfaceStyle = Preferences.shared.theme
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,17 +2,6 @@
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSAppTransportSecurity</key>
|
|
||||||
<dict>
|
|
||||||
<key>NSExceptionDomains</key>
|
|
||||||
<dict>
|
|
||||||
<key>localhost</key>
|
|
||||||
<dict>
|
|
||||||
<key>NSExceptionAllowsInsecureHTTPLoads</key>
|
|
||||||
<true/>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>NSUserActivityTypes</key>
|
<key>NSUserActivityTypes</key>
|
||||||
<array>
|
<array>
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER).activity.show-timeline</string>
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER).activity.show-timeline</string>
|
||||||
|
|
|
@ -12,15 +12,7 @@ class LocalData {
|
||||||
|
|
||||||
static let shared = LocalData()
|
static let shared = LocalData()
|
||||||
|
|
||||||
let defaults: UserDefaults
|
let defaults = UserDefaults()
|
||||||
|
|
||||||
private init() {
|
|
||||||
if ProcessInfo.processInfo.environment.keys.contains("UI_TESTING") {
|
|
||||||
defaults = UserDefaults(suiteName: "\(Bundle.main.bundleIdentifier!).uitesting")!
|
|
||||||
} else {
|
|
||||||
defaults = UserDefaults()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private let onboardingCompleteKey = "onboardingComplete"
|
private let onboardingCompleteKey = "onboardingComplete"
|
||||||
var onboardingComplete: Bool {
|
var onboardingComplete: Bool {
|
||||||
|
@ -71,6 +63,10 @@ class LocalData {
|
||||||
defaults.set(newValue, forKey: accessTokenKey)
|
defaults.set(newValue, forKey: accessTokenKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private init() {
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Notification.Name {
|
extension Notification.Name {
|
||||||
|
|
|
@ -10,5 +10,4 @@ import Foundation
|
||||||
|
|
||||||
extension Notification.Name {
|
extension Notification.Name {
|
||||||
static let preferencesChanged = Notification.Name("Tusker.preferencesChanged")
|
static let preferencesChanged = Notification.Name("Tusker.preferencesChanged")
|
||||||
static let themePreferenceChanged = Notification.Name("Tusker.themePreferenceChanged")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,6 @@ class Preferences: Codable, ObservableObject {
|
||||||
required init(from decoder: Decoder) throws {
|
required init(from decoder: Decoder) throws {
|
||||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
|
|
||||||
self.theme = try container.decode(UIUserInterfaceStyle.self, forKey: .theme)
|
|
||||||
self.showRepliesInProfiles = try container.decode(Bool.self, forKey: .showRepliesInProfiles)
|
self.showRepliesInProfiles = try container.decode(Bool.self, forKey: .showRepliesInProfiles)
|
||||||
self.avatarStyle = try container.decode(AvatarStyle.self, forKey: .avatarStyle)
|
self.avatarStyle = try container.decode(AvatarStyle.self, forKey: .avatarStyle)
|
||||||
self.hideCustomEmojiInUsernames = try container.decode(Bool.self, forKey: .hideCustomEmojiInUsernames)
|
self.hideCustomEmojiInUsernames = try container.decode(Bool.self, forKey: .hideCustomEmojiInUsernames)
|
||||||
|
@ -60,7 +59,6 @@ class Preferences: Codable, ObservableObject {
|
||||||
func encode(to encoder: Encoder) throws {
|
func encode(to encoder: Encoder) throws {
|
||||||
var container = encoder.container(keyedBy: CodingKeys.self)
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
||||||
|
|
||||||
try container.encode(theme, forKey: .theme)
|
|
||||||
try container.encode(showRepliesInProfiles, forKey: .showRepliesInProfiles)
|
try container.encode(showRepliesInProfiles, forKey: .showRepliesInProfiles)
|
||||||
try container.encode(avatarStyle, forKey: .avatarStyle)
|
try container.encode(avatarStyle, forKey: .avatarStyle)
|
||||||
try container.encode(hideCustomEmojiInUsernames, forKey: .hideCustomEmojiInUsernames)
|
try container.encode(hideCustomEmojiInUsernames, forKey: .hideCustomEmojiInUsernames)
|
||||||
|
@ -81,7 +79,6 @@ class Preferences: Codable, ObservableObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Appearance
|
// MARK: - Appearance
|
||||||
@Published var theme = UIUserInterfaceStyle.unspecified
|
|
||||||
@Published var showRepliesInProfiles = false
|
@Published var showRepliesInProfiles = false
|
||||||
@Published var avatarStyle = AvatarStyle.roundRect
|
@Published var avatarStyle = AvatarStyle.roundRect
|
||||||
@Published var hideCustomEmojiInUsernames = false
|
@Published var hideCustomEmojiInUsernames = false
|
||||||
|
@ -104,7 +101,6 @@ class Preferences: Codable, ObservableObject {
|
||||||
@Published var statusContentType: StatusContentType = .plain
|
@Published var statusContentType: StatusContentType = .plain
|
||||||
|
|
||||||
enum CodingKeys: String, CodingKey {
|
enum CodingKeys: String, CodingKey {
|
||||||
case theme
|
|
||||||
case showRepliesInProfiles
|
case showRepliesInProfiles
|
||||||
case avatarStyle
|
case avatarStyle
|
||||||
case hideCustomEmojiInUsernames
|
case hideCustomEmojiInUsernames
|
||||||
|
@ -131,5 +127,3 @@ extension Preferences {
|
||||||
case undecided, accepted, rejected
|
case undecided, accepted, rejected
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension UIUserInterfaceStyle: Codable {}
|
|
||||||
|
|
|
@ -74,37 +74,20 @@ class InstanceSelectorTableViewController: UITableViewController {
|
||||||
loadRecommendedInstances()
|
loadRecommendedInstances()
|
||||||
}
|
}
|
||||||
|
|
||||||
private func parseURLComponents(input: String) -> URLComponents {
|
private func updateSpecificInstance(domain: String) {
|
||||||
// we can't just use the URLComponents(string:) initializer, because when given just a domain (w/o protocol), it interprets it as the path
|
|
||||||
var input = input
|
|
||||||
var components = URLComponents()
|
var components = URLComponents()
|
||||||
// extract protocol
|
if domain.contains("://") {
|
||||||
if input.contains("://") {
|
let parts = domain.components(separatedBy: "://")
|
||||||
let parts = input.components(separatedBy: "://")
|
components.scheme = parts[0]
|
||||||
components.scheme = parts.first!
|
components.host = parts[1]
|
||||||
input = parts.last!
|
} else {
|
||||||
|
components.host = domain
|
||||||
}
|
}
|
||||||
if components.scheme != "https" && components.scheme != "http" {
|
if components.scheme != "https" && components.scheme != "http" {
|
||||||
components.scheme = "https"
|
components.scheme = "https"
|
||||||
}
|
}
|
||||||
// drop path
|
components.path = "/"
|
||||||
if input.contains("/") {
|
|
||||||
let parts = input.components(separatedBy: "/")
|
|
||||||
input = parts.first!
|
|
||||||
}
|
|
||||||
// parse port
|
|
||||||
if input.contains(":") {
|
|
||||||
let parts = input.components(separatedBy: ":")
|
|
||||||
input = parts.first!
|
|
||||||
components.port = Int(parts.last!)
|
|
||||||
}
|
|
||||||
components.host = input
|
|
||||||
return components
|
|
||||||
}
|
|
||||||
|
|
||||||
private func updateSpecificInstance(domain: String) {
|
|
||||||
let components = parseURLComponents(input: domain)
|
|
||||||
|
|
||||||
let client = Client(baseURL: components.url!)
|
let client = Client(baseURL: components.url!)
|
||||||
let request = client.getInstance()
|
let request = client.getInstance()
|
||||||
client.run(request) { (response) in
|
client.run(request) { (response) in
|
||||||
|
|
|
@ -10,13 +10,6 @@ import SwiftUI
|
||||||
struct AppearancePrefsView : View {
|
struct AppearancePrefsView : View {
|
||||||
@ObservedObject var preferences = Preferences.shared
|
@ObservedObject var preferences = Preferences.shared
|
||||||
|
|
||||||
var theme: Binding<UIUserInterfaceStyle> = Binding(get: {
|
|
||||||
Preferences.shared.theme
|
|
||||||
}, set: {
|
|
||||||
Preferences.shared.theme = $0
|
|
||||||
NotificationCenter.default.post(name: .themePreferenceChanged, object: nil)
|
|
||||||
})
|
|
||||||
|
|
||||||
var useCircularAvatars: Binding<Bool> = Binding(get: {
|
var useCircularAvatars: Binding<Bool> = Binding(get: {
|
||||||
Preferences.shared.avatarStyle == .circle
|
Preferences.shared.avatarStyle == .circle
|
||||||
}) {
|
}) {
|
||||||
|
@ -25,11 +18,6 @@ struct AppearancePrefsView : View {
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
List {
|
List {
|
||||||
Picker(selection: theme, label: Text("Theme")) {
|
|
||||||
Text("Use System Theme").tag(UIUserInterfaceStyle.unspecified)
|
|
||||||
Text("Light").tag(UIUserInterfaceStyle.light)
|
|
||||||
Text("Dark").tag(UIUserInterfaceStyle.dark)
|
|
||||||
}
|
|
||||||
Toggle(isOn: $preferences.showRepliesInProfiles) {
|
Toggle(isOn: $preferences.showRepliesInProfiles) {
|
||||||
Text("Show Replies in Profiles")
|
Text("Show Replies in Profiles")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="15701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14868" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15703"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14824"/>
|
||||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -53,9 +53,6 @@
|
||||||
</stackView>
|
</stackView>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="Instance Description" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aD6-LG-BWG" customClass="ContentLabel" customModule="Tusker" customModuleProvider="target">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="Instance Description" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aD6-LG-BWG" customClass="ContentLabel" customModule="Tusker" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="26.5" width="200" height="20.5"/>
|
<rect key="frame" x="0.0" y="26.5" width="200" height="20.5"/>
|
||||||
<accessibility key="accessibilityConfiguration">
|
|
||||||
<accessibilityTraits key="traits" staticText="YES" notEnabled="YES"/>
|
|
||||||
</accessibility>
|
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
//
|
|
||||||
// OnboardingTests.swift
|
|
||||||
// TuskerUITests
|
|
||||||
//
|
|
||||||
// Created by Shadowfacts on 12/21/19.
|
|
||||||
// Copyright © 2019 Shadowfacts. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import XCTest
|
|
||||||
import Ambassador
|
|
||||||
|
|
||||||
class OnboardingTests: TuskerUITests {
|
|
||||||
|
|
||||||
override func setUp() {
|
|
||||||
super.setUp()
|
|
||||||
|
|
||||||
router["/api/v1/instance"] = JSONResponse(handler: { (_) in
|
|
||||||
return [
|
|
||||||
"description": "An instance description",
|
|
||||||
"max_toot_chars": 500,
|
|
||||||
"thumbnail": "http://localhost:8080/thumbnail.png",
|
|
||||||
"title": "Localhost",
|
|
||||||
"uri": "http://localhost:8080",
|
|
||||||
"version": "2.7.2",
|
|
||||||
"urls": [:]
|
|
||||||
]
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func testExample() {
|
|
||||||
let searchField = app.searchFields.element
|
|
||||||
searchField.tap()
|
|
||||||
searchField.typeText("http://localhost:8080")
|
|
||||||
XCTAssertTrue(app.staticTexts["localhost"].exists)
|
|
||||||
XCTAssertTrue(app.staticTexts["An instance description"].exists)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -7,56 +7,28 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import XCTest
|
import XCTest
|
||||||
import Embassy
|
|
||||||
import Ambassador
|
|
||||||
|
|
||||||
class TuskerUITests: XCTestCase {
|
class TuskerUITests: XCTestCase {
|
||||||
|
|
||||||
var eventLoop: EventLoop!
|
|
||||||
var router: Router!
|
|
||||||
var server: HTTPServer!
|
|
||||||
var eventLoopThreadCondition: NSCondition!
|
|
||||||
var eventLoopThread: Thread!
|
|
||||||
|
|
||||||
var app: XCUIApplication!
|
|
||||||
|
|
||||||
private func setupWebServer() {
|
|
||||||
eventLoop = try! SelectorEventLoop(selector: try! KqueueSelector())
|
|
||||||
router = Router()
|
|
||||||
server = DefaultHTTPServer(eventLoop: eventLoop, port: 8080, app: router.app)
|
|
||||||
router["/hello"] = JSONResponse(handler: { (_) in
|
|
||||||
return ["Hello", "World"]
|
|
||||||
})
|
|
||||||
try! server.start()
|
|
||||||
|
|
||||||
eventLoopThreadCondition = NSCondition()
|
|
||||||
eventLoopThread = Thread(block: {
|
|
||||||
self.eventLoop.runForever()
|
|
||||||
self.eventLoopThreadCondition.lock()
|
|
||||||
self.eventLoopThreadCondition.signal()
|
|
||||||
self.eventLoopThreadCondition.unlock()
|
|
||||||
})
|
|
||||||
eventLoopThread.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
override func setUp() {
|
override func setUp() {
|
||||||
setupWebServer()
|
// Put setup code here. This method is called before the invocation of each test method in the class.
|
||||||
|
|
||||||
|
// In UI tests it is usually best to stop immediately when a failure occurs.
|
||||||
continueAfterFailure = false
|
continueAfterFailure = false
|
||||||
app = XCUIApplication()
|
|
||||||
app.launchEnvironment["UI_TESTING"] = "true"
|
// UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
|
||||||
app.launch()
|
XCUIApplication().launch()
|
||||||
|
|
||||||
|
// In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
|
||||||
}
|
}
|
||||||
|
|
||||||
override func tearDown() {
|
override func tearDown() {
|
||||||
server.stopAndWait()
|
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
||||||
eventLoopThreadCondition.lock()
|
}
|
||||||
eventLoop.stop()
|
|
||||||
while eventLoop.running {
|
func testExample() {
|
||||||
if !eventLoopThreadCondition.wait(until: Date(timeIntervalSinceNow: 10)) {
|
// Use recording to get started writing UI tests.
|
||||||
fatalError("Join eventLoopThread timeout")
|
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue