Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Manage Subscription Settings #2323

Merged
merged 139 commits into from
Jan 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
7422774
General View, Sync, Logins, Appeareance first implementation
afterxleep Dec 6, 2023
f85324f
Extract Model and State to separate classes
afterxleep Dec 7, 2023
2060dc1
Improve separation of concerns/responsibilities
afterxleep Dec 7, 2023
317ca72
Use LazyViews
afterxleep Dec 7, 2023
4a8946a
Removed unnecesary viewcontrollers
afterxleep Dec 7, 2023
a63bb5a
Application Lock
afterxleep Dec 7, 2023
1779ecc
Present legacy views from the Root Navigation Controller
afterxleep Dec 7, 2023
67436be
State Management Updates
afterxleep Dec 8, 2023
2cc396e
Email Protection and other links
afterxleep Dec 8, 2023
2102043
State initialization
afterxleep Dec 8, 2023
81d0502
Added Required Cells
afterxleep Dec 8, 2023
8a64f7b
Dismiss legacy ViewControllers and update settings
afterxleep Dec 8, 2023
38f07c0
Network Protection Status
afterxleep Dec 8, 2023
50f5731
Remaining views and cleanup
afterxleep Dec 8, 2023
dd5ae07
Fix Debug Menu
afterxleep Dec 8, 2023
3fa4ee9
Move Font settings out of viewModel
afterxleep Dec 8, 2023
18f4d2a
Fix presentation for login
afterxleep Dec 9, 2023
7f61c51
Cell design
afterxleep Dec 9, 2023
b79586e
Renamed Type
afterxleep Dec 9, 2023
99d8be2
Dismiss the view
afterxleep Dec 9, 2023
a85d5e8
UI Cleanup
afterxleep Dec 9, 2023
c84b756
Add Required Strings to UserText
afterxleep Dec 11, 2023
067d0d9
Move all strings to UserText
afterxleep Dec 11, 2023
eab0239
Merge branch 'main' into daniel/settings-swiftui
afterxleep Dec 11, 2023
897d021
Updated Strings
afterxleep Dec 11, 2023
eab5c1d
Fixed Remaining Strings
afterxleep Dec 11, 2023
a6cc6df
Localization Files
afterxleep Dec 11, 2023
7f43367
Remove SettingsViewController
afterxleep Dec 11, 2023
92e0afd
Update layout priority for Text accesory
afterxleep Dec 11, 2023
2f7c31b
Merge branch 'main' into daniel/settings-swiftui
afterxleep Dec 11, 2023
2607889
Cleanup
afterxleep Dec 11, 2023
3355e92
Revert Appicon changes
afterxleep Dec 11, 2023
f2bcb58
Revert AppIcon Changes
afterxleep Dec 11, 2023
1e7d33a
Fix linter issues (pass 1)
afterxleep Dec 11, 2023
f88de4d
Remove cyclomatic warning
afterxleep Dec 11, 2023
394e3f2
Added debug to previews
afterxleep Dec 11, 2023
d987709
Add all params to preview
afterxleep Dec 11, 2023
4cc3c7a
Comment out preview
afterxleep Dec 11, 2023
f484f89
Passes content from a variable
afterxleep Dec 11, 2023
5521fd0
Make disclosure indicator conditional
afterxleep Dec 11, 2023
ad637f4
Comment out cell
afterxleep Dec 11, 2023
970c283
Add additional debug options to the VPN debug menu (#2251)
samsymons Dec 11, 2023
9c0b336
Quality metrics for Sync (#2254)
bwaresiak Dec 11, 2023
af736fc
Release 7.101.0 (#2257)
jaceklyp Dec 11, 2023
72fe6c6
Fix VPN IPv6 connectivity (#2258)
samsymons Dec 11, 2023
b2b07cb
Run sync e2e on multiple OS versions (#2256)
loremattei Dec 12, 2023
8cbb935
Updated packages
afterxleep Dec 12, 2023
c5a5f65
Added base subscription Packages
afterxleep Nov 24, 2023
a3c991e
Added subscription local packages
afterxleep Nov 27, 2023
d09dc98
Updated constraints
afterxleep Nov 27, 2023
6253101
Moved Dependencies into a single package
afterxleep Nov 27, 2023
db15d93
Display Base Webview
afterxleep Nov 28, 2023
1a33d17
Properly configure userscripts
afterxleep Nov 28, 2023
61830e8
Confirm mesages are being properly received
afterxleep Nov 29, 2023
1762cf8
Display Webview
afterxleep Nov 29, 2023
cfa4241
Implement Settings cell in storyboard
afterxleep Nov 29, 2023
8572ce8
Fix constraints
afterxleep Nov 29, 2023
0184e8e
Only load the WebApp when we have products Available
afterxleep Nov 29, 2023
bd64542
User PurchaseManager publishers
afterxleep Nov 30, 2023
f7621dc
Base Purchase Flow
afterxleep Nov 30, 2023
c816b2b
Remove unwanted reference
afterxleep Nov 30, 2023
66755fc
Add transaction progress view
afterxleep Dec 1, 2023
5762d05
Adjust progress view colors
afterxleep Dec 1, 2023
4595d46
Debug Settings
afterxleep Dec 1, 2023
ca4b133
Update Debug Options
afterxleep Dec 4, 2023
d6be013
Update Settings view to dynamicall show PrivacyPro settings
afterxleep Dec 4, 2023
2547e9c
Inject Fake Authentication
afterxleep Dec 4, 2023
a0f60b4
Updated agent
afterxleep Dec 12, 2023
855774c
Fix conflicts
afterxleep Dec 12, 2023
f8e92ee
Merge branch 'main' into daniel/subscriptions/1.headless-webview
afterxleep Dec 12, 2023
90c0849
Added compiler conditional
afterxleep Dec 12, 2023
a981a07
Remove SettingsVC
afterxleep Dec 12, 2023
73a8afc
Updated Profiles
afterxleep Dec 12, 2023
8599afd
Add IAP Capability
afterxleep Dec 12, 2023
3e78942
Create debug build configuration
afterxleep Dec 12, 2023
53e0974
Hide netP subtitle if “”
afterxleep Dec 12, 2023
ccc4924
Updated missing string
afterxleep Dec 12, 2023
ccb0e3d
Revert Localizable change
afterxleep Dec 12, 2023
9634cff
Updated translations from Smartling
afterxleep Dec 12, 2023
45bb821
Updated missing string
afterxleep Dec 12, 2023
620920e
Revert Localizable change
afterxleep Dec 12, 2023
673d94a
Updated translations from Smartling
afterxleep Dec 12, 2023
379b6c9
Base Privacy Pro Cell in Settings
afterxleep Dec 12, 2023
ea0abd6
Display Privacy Pro Cell when available
afterxleep Dec 12, 2023
e4f9232
Update caption style
afterxleep Dec 12, 2023
b724c35
Added Debug flag
afterxleep Dec 12, 2023
224c683
Use a custom view to render Privacy Pro Cells
afterxleep Dec 12, 2023
70d0355
Section title is now Privacy Pro
afterxleep Dec 12, 2023
8ccd30f
Remove subscription flag from Debug version
afterxleep Dec 12, 2023
044c525
Merge branch 'main' into daniel/settings-swiftui
afterxleep Dec 12, 2023
140bdb6
Merge branch 'daniel/subscriptions-integration' into daniel/subscript…
afterxleep Dec 12, 2023
1735eb6
Update Subscription Code from macOS
afterxleep Dec 13, 2023
61d4bea
Use a custom agent temporarily
afterxleep Dec 13, 2023
66cc3b7
Initialize subscription environment in AppDelegate
afterxleep Dec 13, 2023
01c0fbe
Move subscription init to a method
afterxleep Dec 13, 2023
264766d
Removed non-required scripts
afterxleep Dec 13, 2023
4d98b5e
Present Alert when active subscription is found
afterxleep Dec 13, 2023
6dde957
Update Subscription from macOS
afterxleep Dec 14, 2023
2883219
Check subscription on launch
afterxleep Dec 14, 2023
ba9d3ae
Renamed variable and binded webView
afterxleep Dec 14, 2023
e68ef49
Added debug options to view subscription data
afterxleep Dec 14, 2023
55188a1
Restoring base flow
afterxleep Dec 14, 2023
d0e199d
Noop change
afterxleep Jan 5, 2024
c103960
NOOP
afterxleep Jan 5, 2024
1365627
NOOP
afterxleep Jan 5, 2024
d93a353
NOOP
afterxleep Jan 5, 2024
5b41f0d
Merge branch 'daniel/settings-swiftui' into daniel/subscriptions/1.he…
afterxleep Jan 5, 2024
10fa11d
We are now using “Passwords” for login items
afterxleep Jan 5, 2024
d271360
Merge branch 'daniel/subscriptions/1.headless-webview' into daniel/su…
afterxleep Jan 5, 2024
6caf9b5
Changed Logins to “Passwords”
afterxleep Jan 5, 2024
3865b4e
Present settings modally
afterxleep Jan 8, 2024
f8b6ff9
Restore subscription if trying to purchase again
afterxleep Jan 8, 2024
31f3ab3
Move UI related variables to main
afterxleep Jan 8, 2024
06ffe72
Merged Feedback from Settings Swift UI PR
afterxleep Jan 8, 2024
6a34923
Apply Grouped UI Style for settings
afterxleep Jan 8, 2024
874e2ca
Update locig to display netP
afterxleep Jan 9, 2024
b6f4cfd
Merge branch 'main' into daniel/subscriptions/1.headless-webview
afterxleep Jan 9, 2024
55c5330
Merge branch 'daniel/subscriptions/1.headless-webview' into daniel/su…
afterxleep Jan 9, 2024
d4b11a4
Move properties to Settings State
afterxleep Jan 9, 2024
d30712e
Merge branch 'daniel/subscriptions/1.headless-webview' into daniel/su…
afterxleep Jan 9, 2024
1fbeb48
Display Privacy Pro Subscription Management Options
afterxleep Jan 9, 2024
81c2595
Update cells to properly add buttons
afterxleep Jan 9, 2024
fd6159b
Improve cells
afterxleep Jan 9, 2024
2a880a0
Update cell groups
afterxleep Jan 9, 2024
bc19cbc
Adjust Sync settings cell title and visibility based on feature flags
ayoy Jan 4, 2024
5d919e7
Rename cellTitle as syncCellTitle
ayoy Jan 4, 2024
a53fb74
Integrate sync updates for settings (via Dominik)
afterxleep Jan 9, 2024
b31a1fd
Fix lint issues
afterxleep Jan 10, 2024
7bdf45b
Merge branch 'daniel/subscriptions/1.headless-webview' into daniel/su…
afterxleep Jan 10, 2024
d9f195f
Merge branch 'main' into daniel/subscriptions/2.manage-options
afterxleep Jan 11, 2024
2ff2e41
Move settings init to private methods
afterxleep Jan 11, 2024
0248c98
Fix linter issues
afterxleep Jan 11, 2024
5528d85
Show Subscription debug options
afterxleep Jan 11, 2024
43d53e4
Hide the Back button when a transaction is in progress
afterxleep Jan 11, 2024
f9f1c7d
Fix text
afterxleep Jan 11, 2024
47ed992
Caches the last “Active subscription”
afterxleep Jan 11, 2024
ed00128
Cache subscription state
afterxleep Jan 12, 2024
ad1a5e6
Address Feedback
afterxleep Jan 12, 2024
7a29bb7
Merge branch 'main' into daniel/subscriptions/2.manage-options
afterxleep Jan 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Core/UserDefaultsPropertyWrapper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@ public struct UserDefaultsWrapper<T> {
case bookmarksMigrationVersion = "com.duckduckgo.ios.bookmarksMigrationVersion"

case privacyConfigCustomURL = "com.duckduckgo.ios.privacyConfigCustomURL"

case privacyProHasActiveSubscription = "com.duckduckgo.ios.privacyPro.hasActiveSubscription"
}

private let key: Key
Expand Down
4 changes: 4 additions & 0 deletions DuckDuckGo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -808,6 +808,7 @@
D6E83C642B238432006C8AFB /* SettingsAboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E83C632B238432006C8AFB /* SettingsAboutView.swift */; };
D6E83C662B23936F006C8AFB /* SettingsDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E83C652B23936F006C8AFB /* SettingsDebugView.swift */; };
D6E83C682B23B6A3006C8AFB /* FontSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E83C672B23B6A3006C8AFB /* FontSettings.swift */; };
D6F93E3C2B4FFA97004C268D /* SubscriptionDebugViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6F93E3B2B4FFA97004C268D /* SubscriptionDebugViewController.swift */; };
EA39B7E2268A1A35000C62CD /* privacy-reference-tests in Resources */ = {isa = PBXBuildFile; fileRef = EA39B7E1268A1A35000C62CD /* privacy-reference-tests */; };
EAB19EDA268963510015D3EA /* DomainMatchingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB19ED9268963510015D3EA /* DomainMatchingTests.swift */; };
EE0153E12A6EABE0002A8B26 /* NetworkProtectionConvenienceInitialisers.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0153E02A6EABE0002A8B26 /* NetworkProtectionConvenienceInitialisers.swift */; };
Expand Down Expand Up @@ -2446,6 +2447,7 @@
D6E83C632B238432006C8AFB /* SettingsAboutView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsAboutView.swift; sourceTree = "<group>"; };
D6E83C652B23936F006C8AFB /* SettingsDebugView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsDebugView.swift; sourceTree = "<group>"; };
D6E83C672B23B6A3006C8AFB /* FontSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FontSettings.swift; sourceTree = "<group>"; };
D6F93E3B2B4FFA97004C268D /* SubscriptionDebugViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscriptionDebugViewController.swift; sourceTree = "<group>"; };
EA39B7E1268A1A35000C62CD /* privacy-reference-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "privacy-reference-tests"; path = "submodules/privacy-reference-tests"; sourceTree = SOURCE_ROOT; };
EAB19ED9268963510015D3EA /* DomainMatchingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainMatchingTests.swift; sourceTree = "<group>"; };
EE0153E02A6EABE0002A8B26 /* NetworkProtectionConvenienceInitialisers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProtectionConvenienceInitialisers.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -3897,6 +3899,7 @@
isa = PBXGroup;
children = (
858566E7252E4F56007501B8 /* Debug.storyboard */,
D6F93E3B2B4FFA97004C268D /* SubscriptionDebugViewController.swift */,
8590CB602684D0600089F6BF /* CookieDebugViewController.swift */,
4B0295182537BC6700E00CEF /* ConfigurationDebugViewController.swift */,
858566FA252E55D6007501B8 /* ImageCacheDebugViewController.swift */,
Expand Down Expand Up @@ -6565,6 +6568,7 @@
AA3D854523D9942200788410 /* AppIconSettingsViewController.swift in Sources */,
85C297042476C1FD0063A335 /* DaxDialogsSettings.swift in Sources */,
8505836F219F424500ED4EDB /* UIViewExtension.swift in Sources */,
D6F93E3C2B4FFA97004C268D /* SubscriptionDebugViewController.swift in Sources */,
8505836E219F424500ED4EDB /* RoundedRectangleView.swift in Sources */,
D6D12CA12B291CA90054390C /* Logging.swift in Sources */,
EE8594992A44791C008A6D06 /* NetworkProtectionTunnelController.swift in Sources */,
Expand Down
4 changes: 3 additions & 1 deletion DuckDuckGo/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {

#if SUBSCRIPTION
private func setupSubscriptionsEnvironment() {
SubscriptionPurchaseEnvironment.current = .appStore
Task { SubscriptionPurchaseEnvironment.current = .appStore
await AccountManager().checkSubscriptionState()
}
}
#endif

Expand Down
36 changes: 18 additions & 18 deletions DuckDuckGo/Debug.storyboard
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="22154" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="fgi-g1-scz">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="fgi-g1-scz">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22130"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
Expand Down Expand Up @@ -222,7 +222,7 @@
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" textLabel="2HN-ZT-QyE" style="IBUITableViewCellStyleDefault" id="OZk-lw-UOA">
<rect key="frame" x="0.0" y="441.5" width="414" height="43.5"/>
<rect key="frame" x="0.0" y="485" width="414" height="43.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="OZk-lw-UOA" id="P5Y-e6-1P8">
<rect key="frame" x="0.0" y="0.0" width="383.5" height="43.5"/>
Expand All @@ -242,7 +242,7 @@
</connections>
</tableViewCell>
<tableViewCell clipsSubviews="YES" tag="665" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="iau-ES-Bnx">
<rect key="frame" x="0.0" y="485" width="414" height="44.5"/>
<rect key="frame" x="0.0" y="528.5" width="414" height="44.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="iau-ES-Bnx" id="DHw-no-bUr">
<rect key="frame" x="0.0" y="0.0" width="414" height="44.5"/>
Expand All @@ -251,7 +251,7 @@
<listContentConfiguration key="contentConfiguration" text="Reset Autoconsent Settings"/>
</tableViewCell>
<tableViewCell clipsSubviews="YES" tag="670" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="d5f-gY-QEd">
<rect key="frame" x="0.0" y="529.5" width="414" height="44.5"/>
<rect key="frame" x="0.0" y="573" width="414" height="44.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="d5f-gY-QEd" id="vx4-HG-neV">
<rect key="frame" x="0.0" y="0.0" width="414" height="44.5"/>
Expand All @@ -260,7 +260,7 @@
<listContentConfiguration key="contentConfiguration" text="Reset Email Protection InContext Signup"/>
</tableViewCell>
<tableViewCell clipsSubviews="YES" tag="668" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" id="f8n-C1-CnF">
<rect key="frame" x="0.0" y="574" width="414" height="44.5"/>
<rect key="frame" x="0.0" y="617.5" width="414" height="44.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="f8n-C1-CnF" id="Gna-nE-FtW">
<rect key="frame" x="0.0" y="0.0" width="370" height="44.5"/>
Expand All @@ -269,7 +269,7 @@
<listContentConfiguration key="contentConfiguration" text="Enable Inspectable WebViews" secondaryText=""/>
</tableViewCell>
<tableViewCell clipsSubviews="YES" tag="669" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="checkmark" indentationWidth="10" id="AgK-xW-xB6">
<rect key="frame" x="0.0" y="618.5" width="414" height="44.5"/>
<rect key="frame" x="0.0" y="662" width="414" height="44.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="AgK-xW-xB6" id="onY-PV-AQp">
<rect key="frame" x="0.0" y="0.0" width="370" height="44.5"/>
Expand All @@ -278,7 +278,7 @@
<listContentConfiguration key="contentConfiguration" text="Internal User State" secondaryText=""/>
</tableViewCell>
<tableViewCell clipsSubviews="YES" tag="666" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="Lqc-aq-UoJ">
<rect key="frame" x="0.0" y="663" width="414" height="44.5"/>
<rect key="frame" x="0.0" y="706.5" width="414" height="44.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Lqc-aq-UoJ" id="SOZ-8q-BYe">
<rect key="frame" x="0.0" y="0.0" width="414" height="44.5"/>
Expand All @@ -287,7 +287,7 @@
<listContentConfiguration key="contentConfiguration" text="Crash (fatal error)"/>
</tableViewCell>
<tableViewCell clipsSubviews="YES" tag="667" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="roW-Eb-6hF">
<rect key="frame" x="0.0" y="707.5" width="414" height="44.5"/>
<rect key="frame" x="0.0" y="751" width="414" height="44.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="roW-Eb-6hF" id="1IO-6X-jOv">
<rect key="frame" x="0.0" y="0.0" width="414" height="44.5"/>
Expand Down Expand Up @@ -879,42 +879,42 @@
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="ConfigurationURLTableViewCell" id="i6Y-Di-PX3" customClass="ConfigurationURLTableViewCell" customModule="DuckDuckGo" customModuleProvider="target">
<rect key="frame" x="0.0" y="50" width="414" height="74"/>
<rect key="frame" x="0.0" y="50" width="414" height="74.5"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="i6Y-Di-PX3" id="qn4-gq-5fa">
<rect key="frame" x="0.0" y="0.0" width="414" height="74"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="74.5"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="pKD-Xm-Eu1">
<rect key="frame" x="20" y="11" width="374" height="52"/>
<rect key="frame" x="20" y="11" width="374" height="52.5"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="j3A-OZ-DWy">
<rect key="frame" x="0.0" y="0.0" width="44" height="52"/>
<rect key="frame" x="0.0" y="0.0" width="44" height="52.5"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="gKw-J7-XIW">
<rect key="frame" x="0.0" y="0.0" width="44" height="17"/>
<rect key="frame" x="0.0" y="0.0" width="44" height="17.5"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Subtitle" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="UrI-B0-rWf">
<rect key="frame" x="0.0" y="17" width="44" height="17.5"/>
<rect key="frame" x="0.0" y="17.5" width="44" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" name="accent"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6RK-ug-mZa">
<rect key="frame" x="0.0" y="35" width="44" height="17"/>
<rect key="frame" x="0.0" y="35" width="44" height="17.5"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Nkj-yK-cgm">
<rect key="frame" x="350" y="0.0" width="24" height="52"/>
<rect key="frame" x="350" y="0.0" width="24" height="52.5"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="Reload-24"/>
</button>
Expand Down Expand Up @@ -945,7 +945,7 @@
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="mQl-2s-yDz" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="5501" y="968"/>
<point key="canvasLocation" x="6122" y="968"/>
</scene>
</scenes>
<resources>
Expand Down
Loading
Loading