├── BuildTools
├── Empty.swift
├── Package.swift
└── Package.resolved
├── fastlane
├── metadata
│ ├── en-US
│ │ ├── name.txt
│ │ ├── apple_tv_privacy_policy.txt
│ │ ├── subtitle.txt
│ │ ├── support_url.txt
│ │ ├── marketing_url.txt
│ │ ├── privacy_url.txt
│ │ ├── keywords.txt
│ │ ├── release_notes.txt
│ │ └── promotional_text.txt
│ ├── copyright.txt
│ ├── primary_first_sub_category.txt
│ ├── review_information
│ │ ├── phone_number.txt
│ │ ├── demo_user.txt
│ │ ├── demo_password.txt
│ │ ├── first_name.txt
│ │ ├── last_name.txt
│ │ ├── email_address.txt
│ │ └── notes.txt
│ ├── primary_category.txt
│ ├── primary_second_sub_category.txt
│ ├── secondary_category.txt
│ ├── secondary_first_sub_category.txt
│ └── secondary_second_sub_category.txt
├── Appfile
├── Deliverfile.swift
├── Fastfile
├── README.md
├── Snapfile
└── screenshots
│ └── README.txt
├── Gemfile
├── icon.png
├── icon.psd
├── settings_icon.psd
├── ec3730
├── Assets.xcassets
│ ├── Contents.json
│ ├── More.imageset
│ │ ├── dots.pdf
│ │ └── Contents.json
│ ├── at.imageset
│ │ ├── at-sign.pdf
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── icon.png
│ │ ├── icon-40.png
│ │ ├── icon-72.png
│ │ ├── icon-76.png
│ │ ├── icon@2x.png
│ │ ├── icon-40@2x.png
│ │ ├── icon-40@3x.png
│ │ ├── icon-60@2x.png
│ │ ├── icon-60@3x.png
│ │ ├── icon-72@2x.png
│ │ ├── icon-76@2x.png
│ │ ├── icon-small.png
│ │ ├── icon-83.5@2x.png
│ │ ├── icon-small-50.png
│ │ ├── icon-small@2x.png
│ │ ├── icon-small@3x.png
│ │ ├── ios-marketing.png
│ │ ├── icon-small-50@2x.png
│ │ ├── notification-icon@2x.png
│ │ ├── notification-icon@3x.png
│ │ ├── notification-icon~ipad.png
│ │ └── notification-icon~ipad@2x.png
│ ├── Connected.imageset
│ │ ├── wifi.pdf
│ │ └── Contents.json
│ ├── star.imageset
│ │ ├── star-rate.pdf
│ │ └── Contents.json
│ ├── Network.imageset
│ │ ├── world-2.pdf
│ │ └── Contents.json
│ ├── More_selected.imageset
│ │ ├── dots.pdf
│ │ └── Contents.json
│ ├── Ping.imageset
│ │ ├── direction-56.pdf
│ │ └── Contents.json
│ ├── Source.imageset
│ │ ├── window-dev.pdf
│ │ └── Contents.json
│ ├── Disconnected.imageset
│ │ ├── wifi-off.pdf
│ │ └── Contents.json
│ ├── twitter.imageset
│ │ ├── logo-twitter.pdf
│ │ └── Contents.json
│ ├── Connected_selected.imageset
│ │ ├── wifi.pdf
│ │ └── Contents.json
│ ├── Device.imageset
│ │ ├── phone-camera-back.pdf
│ │ └── Contents.json
│ ├── Host.imageset
│ │ ├── icons8-website-30.png
│ │ ├── icons8-website-60.png
│ │ ├── icons8-website-90.png
│ │ └── Contents.json
│ ├── Network_selected.imageset
│ │ ├── world-2.pdf
│ │ └── Contents.json
│ ├── Settings.imageset
│ │ ├── settings-gear.pdf
│ │ └── Contents.json
│ ├── AkhmadDark.appiconset
│ │ ├── Source 2_dark.png
│ │ └── Contents.json
│ ├── Ping_selected.imageset
│ │ ├── direction-56.pdf
│ │ └── Contents.json
│ ├── Source_selected.imageset
│ │ ├── window-dev.pdf
│ │ └── Contents.json
│ ├── AkhmadLight.appiconset
│ │ ├── Source 2_light.png
│ │ └── Contents.json
│ ├── Disconnected_selected.imageset
│ │ ├── wifi-off.pdf
│ │ └── Contents.json
│ ├── Settings_selected.imageset
│ │ ├── settings-gear.pdf
│ │ └── Contents.json
│ ├── Device_selected.imageset
│ │ ├── phone-camera-back.pdf
│ │ └── Contents.json
│ ├── AppIconThumb.imageset
│ │ └── Contents.json
│ ├── AkhmadDarkThumb.imageset
│ │ └── Contents.json
│ └── AkhmadLightThumb.imageset
│ │ └── Contents.json
├── DemoData
│ ├── GoogleWebRiskSectionModel.json
│ ├── WhoIsXmlCategorizationSectionModel.json
│ ├── Utility.swift
│ ├── WhoIsXmlGeoLocationSectionModel.json
│ ├── WhoisXmlReputationSectionModel.json
│ └── WhoIsXmlContactsSectionModel.json
├── Extensions
│ ├── Interface.swift
│ ├── UIAlertController.swift
│ ├── Reachability.swift
│ ├── Error.swift
│ ├── Encodable+dictionary.swift
│ ├── UITextView.swift
│ ├── SimpleAppIcons+NetUtils.swift
│ ├── UIView.swift
│ ├── UIImage+Codable.swift
│ └── UserDefaults.swift
├── Views
│ ├── CopyCell
│ │ ├── NewCopyCellProtocol.swift
│ │ ├── CopyCellDetailStyle.swift
│ │ ├── CopyCellMultipleTypesView.swift
│ │ ├── CopyCellChevronView.swift
│ │ ├── CopyCellContentView.swift
│ │ ├── CopyCellSingleItemRowView.swift
│ │ ├── CopyCellStyleConfig.swift
│ │ └── CopyCellToggleableItemRowView.swift
│ ├── Host
│ │ ├── HostModelWrapperView.swift
│ │ ├── HostViewSectionFocusView.swift
│ │ ├── HostViewSectionContent.swift
│ │ ├── HostResult.swift
│ │ ├── HostBarView.swift
│ │ └── HostSectionOrganizerView.swift
│ ├── Source
│ │ ├── Snap
│ │ │ ├── SnapPoint.swift
│ │ │ └── SnapState.swift
│ │ ├── RunestoneView.swift
│ │ └── WebWrapperView.swift
│ ├── TappedText.swift
│ ├── FSDisclosureGroup.swift
│ ├── ShareSheetView.swift
│ ├── WebkitOverlayView.swift
│ ├── Interface
│ │ ├── InterfaceConnectionBarView.swift
│ │ └── InterfaceListView.swift
│ ├── UIViewControllerView.swift
│ └── Device
│ │ └── DeviceInfoSectionView.swift
├── Models
│ ├── Device
│ │ ├── DeviceInfoSectionModel.swift
│ │ ├── Sections
│ │ │ ├── FingerprintInfoModel.swift
│ │ │ ├── DataUsageInfoModel.swift
│ │ │ ├── ProcessInfoModel.swift
│ │ │ └── CarrierInfoModel.swift
│ │ └── DeviceInfoModel.swift
│ ├── FingerprintModel.swift
│ ├── Sections
│ │ ├── LocalDnsModel.swift
│ │ ├── WhoisXmlReputationSectionModel.swift
│ │ └── UrlParsedModel.swift
│ └── ReachabilityModel.swift
├── Modifiers
│ └── PaddingListModifier.swift
├── Data Feeds
│ ├── Google
│ │ ├── GoogleWebRiskRecord.swift
│ │ └── GoogleWebRiskCellManager.swift
│ ├── DataFeed.swift
│ ├── DataFeedPurchaseProtocol.swift
│ ├── CoreData
│ │ └── NetUtilsCoreData.xcdatamodeld
│ │ │ └── Usage.xcdatamodel
│ │ │ └── contents
│ ├── DataFeedService.swift
│ ├── WhoisXML
│ │ ├── WhoIsXmlGeoLoactionService.swift
│ │ ├── WhoIsXmlCategorizationService.swift
│ │ ├── WhoisXMLDnsService.swift
│ │ ├── WhoisXmlContactsService.swift
│ │ ├── WhoIsXmlGeoLocationResult.swift
│ │ └── WhoisXmlDnsCells.swift
│ ├── DataFeedEndpoint.swift
│ ├── DataFeedCells.swift
│ ├── DataFeedSubscription.swift
│ ├── URL Parse
│ │ └── UrlParsedFeed.swift
│ ├── DataFeedErrors.swift
│ ├── DataFeedSubscriptionCellManager.swift
│ └── LocalDns
│ │ └── LocalDns.swift
├── Protocols
│ └── InAppPurchaseUpdateDelegate.swift
├── Persistence
│ ├── HostData.swift
│ ├── HostDataGroup.swift
│ └── Persistence.swift
├── ec3730.entitlements
├── DefaultsSwitch.swift
├── Controllers
│ └── EZPanel.swift
├── TimedCache.swift
├── CenterTextTableViewCell.swift
├── LoadingCell.swift
├── CopyLabel.swift
├── WiFiSSID.swift
├── CopyCell.swift
├── CopyDetailCell.swift
├── IAPFooterView.swift
├── Info.plist
└── CellManager.swift
├── External
└── Themes
│ ├── Sources
│ ├── RunestoneOneDarkTheme
│ │ ├── Colors.xcassets
│ │ │ ├── Contents.json
│ │ │ ├── OneDarkAqua.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── OneDarkBlue.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── OneDarkGreen.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── OneDarkPurple.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── OneDarkRed.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── OneDarkYellow.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── OneDarkBackground.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── OneDarkComment.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── OneDarkCurrentLine.colorset
│ │ │ │ └── Contents.json
│ │ │ └── OneDarkForeground.colorset
│ │ │ │ └── Contents.json
│ │ └── OneDarkTheme.swift
│ ├── RunestoneTomorrowTheme
│ │ ├── Colors.xcassets
│ │ │ ├── Contents.json
│ │ │ ├── TomorrowAqua.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowBlue.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowRed.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowComment.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowGreen.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowOrange.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowPurple.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowYellow.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowBackground.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowCurrentLine.colorset
│ │ │ │ └── Contents.json
│ │ │ └── TomorrowForeground.colorset
│ │ │ │ └── Contents.json
│ │ └── TomorrowTheme.swift
│ ├── RunestoneTomorrowNightTheme
│ │ ├── Colors.xcassets
│ │ │ ├── Contents.json
│ │ │ ├── TomorrowNightAqua.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowNightBlue.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowNightRed.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowNightComment.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowNightGreen.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowNightOrange.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowNightPurple.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowNightYellow.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowNightBackground.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── TomorrowNightCurrentLine.colorset
│ │ │ │ └── Contents.json
│ │ │ └── TomorrowNightForeground.colorset
│ │ │ │ └── Contents.json
│ │ └── TomorrowNightTheme.swift
│ ├── RunestoneThemeCommon
│ │ ├── EditorTheme.swift
│ │ └── HighlightName.swift
│ └── RunestonePlainTextTheme
│ │ └── PlainTextTheme.swift
│ ├── .gitignore
│ ├── README.md
│ └── Package.swift
├── ec3730.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── ec3730.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcuserdata
│ └── twodayslate.xcuserdatad
│ └── xcschemes
│ └── xcschememanagement.plist
├── ec3730Tests
├── Info.plist
└── ec3730Tests.swift
├── ec3730UITests
└── Info.plist
├── .swiftformat
├── Makefile
├── README.md
├── .swiftlint.yml
└── .gitignore
/BuildTools/Empty.swift:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/en-US/name.txt:
--------------------------------------------------------------------------------
1 | NetUtils
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/copyright.txt:
--------------------------------------------------------------------------------
1 | Zachary Gorak
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/primary_first_sub_category.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/review_information/phone_number.txt:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/fastlane/metadata/en-US/apple_tv_privacy_policy.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/en-US/subtitle.txt:
--------------------------------------------------------------------------------
1 | Network Utilities
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/primary_category.txt:
--------------------------------------------------------------------------------
1 | PRODUCTIVITY
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/primary_second_sub_category.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/review_information/demo_user.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/secondary_category.txt:
--------------------------------------------------------------------------------
1 | UTILITIES
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/secondary_first_sub_category.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/secondary_second_sub_category.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/review_information/demo_password.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/review_information/first_name.txt:
--------------------------------------------------------------------------------
1 | Zachary
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/review_information/last_name.txt:
--------------------------------------------------------------------------------
1 | Gorak
2 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | gem "fastlane"
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/en-US/support_url.txt:
--------------------------------------------------------------------------------
1 | http://zac.gorak.us/ios
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/en-US/marketing_url.txt:
--------------------------------------------------------------------------------
1 | http://zac.gorak.us/ios
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/review_information/email_address.txt:
--------------------------------------------------------------------------------
1 | zac@gorak.us
2 |
--------------------------------------------------------------------------------
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/icon.png
--------------------------------------------------------------------------------
/icon.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/icon.psd
--------------------------------------------------------------------------------
/fastlane/metadata/en-US/privacy_url.txt:
--------------------------------------------------------------------------------
1 | http://zac.gorak.us/ios/privacy.html
2 |
--------------------------------------------------------------------------------
/settings_icon.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/settings_icon.psd
--------------------------------------------------------------------------------
/fastlane/metadata/review_information/notes.txt:
--------------------------------------------------------------------------------
1 | Source code: https://github.com/twodayslate/NetUtils
2 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/en-US/keywords.txt:
--------------------------------------------------------------------------------
1 | networking, utilities, ping, source, reachability, whois, dns, ip, ipv4, ipv6, web, risk, cyber
2 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/More.imageset/dots.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/More.imageset/dots.pdf
--------------------------------------------------------------------------------
/fastlane/metadata/en-US/release_notes.txt:
--------------------------------------------------------------------------------
1 | - Bug fixes and improvements
2 |
3 | Reviews are welcomed and appreciated - thank you for the support!
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/at.imageset/at-sign.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/at.imageset/at-sign.pdf
--------------------------------------------------------------------------------
/fastlane/metadata/en-US/promotional_text.txt:
--------------------------------------------------------------------------------
1 | The most unified & consistent WHOIS, DNS, and reputation lookups in the App Store - now with Web Risk!
2 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Connected.imageset/wifi.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Connected.imageset/wifi.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/star.imageset/star-rate.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/star.imageset/star-rate.pdf
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Network.imageset/world-2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Network.imageset/world-2.pdf
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-40.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-72.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-76.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon@2x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/More_selected.imageset/dots.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/More_selected.imageset/dots.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Ping.imageset/direction-56.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Ping.imageset/direction-56.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Source.imageset/window-dev.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Source.imageset/window-dev.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-small.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Disconnected.imageset/wifi-off.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Disconnected.imageset/wifi-off.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/twitter.imageset/logo-twitter.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/twitter.imageset/logo-twitter.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-small-50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-small-50.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-small@2x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-small@3x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/ios-marketing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/ios-marketing.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Connected_selected.imageset/wifi.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Connected_selected.imageset/wifi.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Device.imageset/phone-camera-back.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Device.imageset/phone-camera-back.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Host.imageset/icons8-website-30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Host.imageset/icons8-website-30.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Host.imageset/icons8-website-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Host.imageset/icons8-website-60.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Host.imageset/icons8-website-90.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Host.imageset/icons8-website-90.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Network_selected.imageset/world-2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Network_selected.imageset/world-2.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Settings.imageset/settings-gear.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Settings.imageset/settings-gear.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AkhmadDark.appiconset/Source 2_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AkhmadDark.appiconset/Source 2_dark.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/icon-small-50@2x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Ping_selected.imageset/direction-56.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Ping_selected.imageset/direction-56.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Source_selected.imageset/window-dev.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Source_selected.imageset/window-dev.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AkhmadLight.appiconset/Source 2_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AkhmadLight.appiconset/Source 2_light.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/notification-icon@2x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/notification-icon@3x.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Disconnected_selected.imageset/wifi-off.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Disconnected_selected.imageset/wifi-off.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Settings_selected.imageset/settings-gear.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Settings_selected.imageset/settings-gear.pdf
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad.png
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Device_selected.imageset/phone-camera-back.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/Device_selected.imageset/phone-camera-back.pdf
--------------------------------------------------------------------------------
/ec3730/DemoData/GoogleWebRiskSectionModel.json:
--------------------------------------------------------------------------------
1 | {
2 | "threat": {
3 | "threatTypes": [
4 | "MALWARE"
5 | ],
6 | "expireTime": "2019-07-17T15:01:23.045123456Z"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/twodayslate/NetUtils/master/ec3730/Assets.xcassets/AppIcon.appiconset/notification-icon~ipad@2x.png
--------------------------------------------------------------------------------
/ec3730/Extensions/Interface.swift:
--------------------------------------------------------------------------------
1 | import NetUtils
2 |
3 | extension Interface: Identifiable {
4 | public var id: Int {
5 | "\(name)\(address ?? "")\(debugDescription)".hashValue
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/ec3730.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/External/Themes/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | /*.xcodeproj
5 | xcuserdata/
6 | DerivedData/
7 | .swiftpm/config/registries.json
8 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
9 | .netrc
10 |
--------------------------------------------------------------------------------
/ec3730/Views/CopyCell/NewCopyCellProtocol.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | protocol NewCopyCellProtocol: View, Hashable, Identifiable {
4 | typealias Shareable = Codable & Hashable
5 | var shareable: any Shareable { get }
6 | }
7 |
--------------------------------------------------------------------------------
/ec3730.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneThemeCommon/EditorTheme.swift:
--------------------------------------------------------------------------------
1 | import Runestone
2 | import UIKit
3 |
4 | public protocol EditorTheme: Runestone.Theme {
5 | var backgroundColor: UIColor { get }
6 | var userInterfaceStyle: UIUserInterfaceStyle { get }
7 | }
8 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Device.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "phone-camera-back.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AppIconThumb.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "settings_icon.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Device_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "phone-camera-back.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AkhmadDarkThumb.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Source 2_dark.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AkhmadLightThumb.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Source 2_light.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/ec3730/Extensions/UIAlertController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIAlertController.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 8/12/19.
6 | // Copyright © 2019 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | extension UIAlertController {}
13 |
--------------------------------------------------------------------------------
/ec3730.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/External/Themes/README.md:
--------------------------------------------------------------------------------
1 | # Themes
2 |
3 | Contains the themes used by the example project. The following themes are included:
4 |
5 | - One Dark
6 | - Plain Text
7 | - Tomorrow
8 | - Tomorrow Night
9 |
10 | The RunestoneThemeCommon package includes the types used across all of the themes and the example project.
11 |
--------------------------------------------------------------------------------
/ec3730.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AkhmadDark.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Source 2_dark.png",
5 | "idiom" : "universal",
6 | "platform" : "ios",
7 | "size" : "1024x1024"
8 | }
9 | ],
10 | "info" : {
11 | "author" : "xcode",
12 | "version" : 1
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/AkhmadLight.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Source 2_light.png",
5 | "idiom" : "universal",
6 | "platform" : "ios",
7 | "size" : "1024x1024"
8 | }
9 | ],
10 | "info" : {
11 | "author" : "xcode",
12 | "version" : 1
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Connected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "wifi.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/at.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "at-sign.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/star.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "star-rate.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Models/Device/DeviceInfoSectionModel.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | class DeviceInfoSectionModel: ObservableObject, Identifiable {
4 | var title: String = ""
5 | @MainActor @Published var enabled: Bool = false
6 | @MainActor @Published var rows = [CopyCellType]()
7 |
8 | @MainActor func reload() async {}
9 | }
10 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/More.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "dots.pdf",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "template-rendering-intent" : "template"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Network.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "world-2.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Ping.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "direction-56.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Source.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "window-dev.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Connected_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "wifi.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Disconnected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "wifi-off.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/More_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "dots.pdf",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "template-rendering-intent" : "template"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Network_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "world-2.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Settings.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "settings-gear.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/twitter.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "logo-twitter.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Ping_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "direction-56.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Source_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "window-dev.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Extensions/Reachability.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Reachability.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 9/3/18.
6 | // Copyright © 2018 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Reachability
11 |
12 | extension Reachability {
13 | static let shared = (try? Reachability())!
14 | }
15 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Disconnected_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "wifi-off.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Settings_selected.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "settings-gear.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
--------------------------------------------------------------------------------
/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | app_identifier("com.twodayslate.ec3730") # The bundle identifier of your app
2 | apple_id("zac@gorak.us") # Your Apple email address
3 |
4 | itc_team_id("106450805") # App Store Connect Team ID
5 | team_id("C6L3992RFB") # Developer Portal Team ID
6 |
7 | # For more information about the Appfile, see:
8 | # https://docs.fastlane.tools/advanced/#appfile
9 |
--------------------------------------------------------------------------------
/ec3730/Extensions/Error.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Error.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 8/13/19.
6 | // Copyright © 2019 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension Error {
12 | var localized: LocalizedError? {
13 | self as? LocalizedError
14 | }
15 |
16 | var title: String {
17 | "Error"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/ec3730/DemoData/WhoIsXmlCategorizationSectionModel.json:
--------------------------------------------------------------------------------
1 | {
2 | "as":
3 | {"asn":15169,"domain":"https://about.google/intl/en/","name":"GOOGLE","route":"2607:f8b0::/32","type":"Content"},
4 | "domainName":"google.com",
5 | "categories":[
6 | {"confidence":1,"id":50,"name":"Search Engines"}
7 | ],
8 | "createdDate":"1997-09-15T07:00:00+00:00",
9 | "websiteResponded":true
10 | }
11 |
--------------------------------------------------------------------------------
/ec3730/Views/Host/HostModelWrapperView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | @available(iOS 15.0, *)
4 | /**
5 | This is a wrapper view to ensure that the gien view has the shared HostViewModel shared environment object
6 | */
7 | struct HostModelWrapperView: View {
8 | var view: Content
9 |
10 | var body: some View {
11 | view.environmentObject(HostViewModel.shared)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ec3730/Views/CopyCell/CopyCellDetailStyle.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | enum CopyCellDetailStyle {
4 | case gray
5 | case accent
6 | case label
7 |
8 | var color: Color {
9 | switch self {
10 | case .gray:
11 | return .gray
12 | case .accent:
13 | return .accentColor
14 | case .label:
15 | return Color(UIColor.label)
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/BuildTools/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.1
2 | import PackageDescription
3 |
4 | let package = Package(
5 | name: "BuildTools",
6 | platforms: [.macOS(.v10_11)],
7 | dependencies: [
8 | .package(url: "https://github.com/nicklockwood/SwiftFormat", from: "0.49.0"),
9 | .package(url: "https://github.com/realm/SwiftLint.git", .upToNextMajor(from: "0.47.1")),
10 | ],
11 | targets: [.target(name: "BuildTools", path: "")]
12 | )
13 |
--------------------------------------------------------------------------------
/ec3730/Modifiers/PaddingListModifier.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct PaddingListModifier: ViewModifier {
4 | let padding: [(Edge.Set, CGFloat?)]
5 | func body(content: Content) -> some View {
6 | if let first = padding.first {
7 | content
8 | .padding(first.0, first.1)
9 | .modifier(PaddingListModifier(padding: Array(padding.dropFirst())))
10 | } else {
11 | content
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/fastlane/Deliverfile.swift:
--------------------------------------------------------------------------------
1 | // The Deliverfile allows you to store various App Store Connect metadata
2 | // For more information, check out the docs
3 | // https://docs.fastlane.tools/actions/deliver/
4 |
5 | // In general, you can use the options available
6 | // fastlane deliver --help
7 |
8 | // Remove the // in front of the line to enable the option
9 |
10 | class Deliverfile: DeliverfileProtocol {
11 | //var username: String { return "" }
12 | //var appIdentifier: String? { return "" }
13 | }
14 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/OneDarkAqua.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.761",
9 | "green" : "0.714",
10 | "red" : "0.337"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/OneDarkBlue.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.937",
9 | "green" : "0.686",
10 | "red" : "0.380"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/OneDarkGreen.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.475",
9 | "green" : "0.765",
10 | "red" : "0.596"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/OneDarkPurple.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.867",
9 | "green" : "0.471",
10 | "red" : "0.776"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/OneDarkRed.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.459",
9 | "green" : "0.424",
10 | "red" : "0.878"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/OneDarkYellow.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.482",
9 | "green" : "0.753",
10 | "red" : "0.898"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowAqua.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.624",
9 | "green" : "0.600",
10 | "red" : "0.243"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowBlue.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.682",
9 | "green" : "0.443",
10 | "red" : "0.259"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowRed.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.161",
9 | "green" : "0.157",
10 | "red" : "0.784"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/OneDarkBackground.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.204",
9 | "green" : "0.173",
10 | "red" : "0.157"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/OneDarkComment.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.529",
9 | "green" : "0.490",
10 | "red" : "0.471"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/OneDarkCurrentLine.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.255",
9 | "green" : "0.224",
10 | "red" : "0.212"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneOneDarkTheme/Colors.xcassets/OneDarkForeground.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.749",
9 | "green" : "0.698",
10 | "red" : "0.671"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowComment.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.549",
9 | "green" : "0.565",
10 | "red" : "0.557"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowGreen.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.000",
9 | "green" : "0.549",
10 | "red" : "0.443"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowOrange.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.122",
9 | "green" : "0.529",
10 | "red" : "0.961"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowPurple.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.659",
9 | "green" : "0.349",
10 | "red" : "0.537"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowYellow.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.000",
9 | "green" : "0.718",
10 | "red" : "0.918"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightAqua.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.718",
9 | "green" : "0.745",
10 | "red" : "0.541"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightBlue.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.745",
9 | "green" : "0.635",
10 | "red" : "0.506"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightRed.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.400",
9 | "green" : "0.400",
10 | "red" : "0.800"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowBackground.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "1.000",
9 | "green" : "1.000",
10 | "red" : "1.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowCurrentLine.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.937",
9 | "green" : "0.937",
10 | "red" : "0.937"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowTheme/Colors.xcassets/TomorrowForeground.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.298",
9 | "green" : "0.302",
10 | "red" : "0.302"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ec3730/Data Feeds/Google/GoogleWebRiskRecord.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GoogleWebRiskRecord.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 10/17/19.
6 | // Copyright © 2019 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct GoogleWebRiskRecordWrapper: Codable {
12 | var threat: GoogleWebRiskRecord?
13 | var error: String?
14 | }
15 |
16 | struct GoogleWebRiskRecord: Codable {
17 | var threatTypes: [GoogleWebRisk.ThreatTypes]
18 | var expireTime: Date
19 | }
20 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightComment.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.588",
9 | "green" : "0.596",
10 | "red" : "0.588"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightGreen.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.408",
9 | "green" : "0.741",
10 | "red" : "0.710"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightOrange.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.373",
9 | "green" : "0.576",
10 | "red" : "0.871"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightPurple.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.733",
9 | "green" : "0.580",
10 | "red" : "0.698"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightYellow.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.455",
9 | "green" : "0.776",
10 | "red" : "0.941"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ec3730/Views/CopyCell/CopyCellMultipleTypesView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct CopyCellMultipleTypesView: View {
4 | var title: String
5 | var contents: [CopyCellType]
6 |
7 | @Binding var expanded: Bool
8 |
9 | var body: some View {
10 | DisclosureGroup(isExpanded: $expanded, content: {
11 | ForEach(contents) { content in
12 | content
13 | }
14 | }, label: {
15 | Text(title)
16 | })
17 | .padding()
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightBackground.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.129",
9 | "green" : "0.122",
10 | "red" : "0.114"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightCurrentLine.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.180",
9 | "green" : "0.165",
10 | "red" : "0.157"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/External/Themes/Sources/RunestoneTomorrowNightTheme/Colors.xcassets/TomorrowNightForeground.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.776",
9 | "green" : "0.784",
10 | "red" : "0.773"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ec3730/Extensions/Encodable+dictionary.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Encodable.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 12/29/22.
6 | // Copyright © 2022 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | extension Encodable {
12 | var dictionary: [String: Any]? {
13 | guard let data = try? JSONEncoder().encode(self) else { return nil }
14 | return (try? JSONSerialization.jsonObject(with: data, options: .allowFragments)).flatMap { $0 as? [String: Any] }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/ec3730/Extensions/UITextView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UITextView.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 8/28/18.
6 | // Copyright © 2018 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | public extension UITextView {
13 | func scrollToBottom() {
14 | if !text.isEmpty {
15 | let location = text.count - 1
16 | let bottom = NSRange(location: location, length: 1)
17 | scrollRangeToVisible(bottom)
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ec3730/Assets.xcassets/Host.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "icons8-website-30.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "icons8-website-60.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "icons8-website-90.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/ec3730/Views/CopyCell/CopyCellChevronView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct CopyCellChevronView: View {
4 | var body: some View {
5 | Image(systemName: "chevron.right")
6 | .font(.system(size: 14, weight: .semibold))
7 | // .imageScale(.small)
8 | .foregroundColor(Color(UIColor.systemGray3))
9 | /*
10 | height 14
11 | color:
12 | "0.9999999403953552",
13 | "0.9999999403953552",
14 | "0.9999999403953552"
15 | */
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ec3730/Views/CopyCell/CopyCellContentView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct CopyCellContentView: View {
4 | var content: String
5 | let style: CopyCellStyleConfig
6 |
7 | var body: some View {
8 | HStack(alignment: .center) {
9 | Spacer()
10 | Text(content).foregroundColor(style.detailStyle.color)
11 | if style.chevron {
12 | CopyCellChevronView()
13 | }
14 | }
15 | .modifier(PaddingListModifier(padding: style.padding))
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ec3730/DemoData/Utility.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Utility.swift
3 | // ec3730
4 | //
5 | // Created by Ahmad Azam on 29/05/2022.
6 | // Copyright © 2022 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public func loadJson(filename fileName: String) -> Data? {
12 | var result: Data?
13 | if let url = Bundle.main.url(forResource: fileName, withExtension: "json") {
14 | do {
15 | result = try Data(contentsOf: url)
16 | } catch {
17 | print("error:\(error)")
18 | }
19 | }
20 | return result
21 | }
22 |
--------------------------------------------------------------------------------
/ec3730/Extensions/SimpleAppIcons+NetUtils.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SimpleAppIcons+NetUtils.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 9/24/23.
6 | // Copyright © 2023 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import SimpleCommon
10 |
11 | extension SimpleAppIcon {
12 | static let dark = SimpleAppIcon(alternateIconName: "AkhmadDark", assetName: "AkhmadDarkThumb")
13 | static let light = SimpleAppIcon(alternateIconName: nil, assetName: "AkhmadLightThumb")
14 | static let legacy = SimpleAppIcon(alternateIconName: "AppIcon", assetName: "AppIconThumb")
15 | }
16 |
--------------------------------------------------------------------------------
/ec3730/Extensions/UIView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIView.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 8/14/19.
6 | // Copyright © 2019 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | extension UIView {
13 | func roundCorners(corners: UIRectCorner, radius: CGFloat) {
14 | let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
15 | let mask = CAShapeLayer()
16 | mask.path = path.cgPath
17 | layer.mask = mask
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/ec3730/Views/Source/Snap/SnapPoint.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | public enum SnapPoint {
4 | case height(CGFloat)
5 | case paddingToTop(CGFloat)
6 | case fraction(CGFloat)
7 | }
8 |
9 | extension SnapPoint: ExpressibleByIntegerLiteral {
10 | public init(integerLiteral value: CGFloat.IntegerLiteralType) {
11 | self = .height(CGFloat(integerLiteral: value))
12 | }
13 | }
14 |
15 | extension SnapPoint: ExpressibleByFloatLiteral {
16 | public init(floatLiteral value: CGFloat.FloatLiteralType) {
17 | self = .height(CGFloat(floatLiteral: value))
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/ec3730/Views/CopyCell/CopyCellSingleItemRowView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct CopyCellSingleItemRowView: View {
4 | var title: String
5 | var content: String
6 | let style: CopyCellStyleConfig
7 |
8 | var body: some View {
9 | HStack(alignment: .center) {
10 | Text(title)
11 | Spacer()
12 | Text(content).foregroundColor(style.detailStyle.color)
13 | if style.chevron {
14 | CopyCellChevronView()
15 | }
16 | }
17 | .modifier(PaddingListModifier(padding: style.padding))
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/ec3730/Protocols/InAppPurchaseUpdateDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InAppPurchaseUpdateDelegate.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 8/12/19.
6 | // Copyright © 2019 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import SwiftyStoreKit
11 |
12 | protocol DataFeedInAppPurchaseUpdateDelegate {
13 | func didUpdateInAppPurchase(_ for: DataFeed, error: Error?, purchaseResult: PurchaseResult?, restoreResults: RestoreResults?, verifySubscriptionResult: VerifySubscriptionResult?, verifyPurchaseResult: VerifyPurchaseResult?, retrieveResults: RetrieveResults?)
14 | }
15 |
--------------------------------------------------------------------------------
/ec3730/Views/Source/RunestoneView.swift:
--------------------------------------------------------------------------------
1 | import Runestone
2 | import SwiftUI
3 |
4 | struct RunestoneView: UIViewRepresentable {
5 | @Binding var text: String
6 | @Binding var textView: TextView
7 |
8 | func makeUIView(context _: Context) -> TextView {
9 | let view = textView
10 | view.backgroundColor = .clear
11 | view.isEditable = false
12 | view.contentInset = .init(top: 0, left: 8, bottom: 0, right: 8)
13 | return view
14 | }
15 |
16 | func updateUIView(_ uiView: TextView, context _: Context) {
17 | uiView.text = text
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/ec3730/Data Feeds/DataFeed.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DataFeed.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 9/26/19.
6 | // Copyright © 2019 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import StoreKit
11 | import SwiftyStoreKit
12 |
13 | protocol DataFeedSingleton: DataFeed {
14 | static var current: Self { get }
15 | static var session: URLSession { get }
16 | }
17 |
18 | protocol DataFeed: AnyObject {
19 | var name: String { get }
20 | var userKey: String? { get set }
21 |
22 | var webpage: URL { get }
23 |
24 | typealias Endpoints = DataFeedEndpoint
25 | }
26 |
--------------------------------------------------------------------------------
/ec3730/Views/CopyCell/CopyCellStyleConfig.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct CopyCellStyleConfig {
4 | var detailStyle: CopyCellDetailStyle
5 | var padding: [(Edge.Set, CGFloat?)] = [(Edge.Set.all, nil)]
6 | var chevron: Bool = false
7 |
8 | static let gray: Self = .init(detailStyle: .gray)
9 | // A Style for a cell in an multiple cell
10 | static let expandable: Self = .init(
11 | detailStyle: .label,
12 | padding: [
13 | ([.leading, .trailing], nil),
14 | (.top, 4),
15 | ]
16 | )
17 | static let chevron: Self = .init(detailStyle: .gray, chevron: true)
18 | }
19 |
--------------------------------------------------------------------------------
/ec3730/Views/CopyCell/CopyCellToggleableItemRowView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct CopyCellToggleableItemRowView: View {
4 | var title: String
5 | var contents: [String]
6 | let style: CopyCellStyleConfig
7 |
8 | var body: some View {
9 | HStack(alignment: .center) {
10 | Text(self.title)
11 | Spacer()
12 | TappedText(content: contents)
13 | .foregroundColor(style.detailStyle.color)
14 |
15 | if style.chevron {
16 | CopyCellChevronView()
17 | }
18 | }
19 | .modifier(PaddingListModifier(padding: style.padding))
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ec3730/Data Feeds/DataFeedPurchaseProtocol.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DataFeedPurchaseProtocol.swift
3 | // ec3730
4 | //
5 | // Created by Zachary Gorak on 10/17/19.
6 | // Copyright © 2019 Zachary Gorak. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import StoreKit
11 | import SwiftyStoreKit
12 |
13 | protocol DataFeedPurchaseProtocol: DataFeed {
14 | var paid: Bool { get }
15 | var owned: Bool { get }
16 |
17 | var defaultProduct: SKProduct? { get }
18 |
19 | func restore(completion block: ((RestoreResults) -> Void)?)
20 | func verify(completion block: ((Error?) -> Void)?)
21 | func retrieve(completion block: ((Error?) -> Void)?)
22 | }
23 |
--------------------------------------------------------------------------------
/ec3730/Views/TappedText.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct TappedText: View {
4 | @State private var selectedTextIndex: Int = 0
5 |
6 | var content: [String]
7 |
8 | var body: some View {
9 | Text(content[selectedTextIndex])
10 | .onTapGesture {
11 | let temp = selectedTextIndex + 1
12 |
13 | selectedTextIndex = temp >= content.count ? 0 : temp
14 | }
15 | }
16 | }
17 |
18 | #if DEBUG
19 | struct TappedTextPreview: PreviewProvider {
20 | static var previews: some View {
21 | TappedText(content: (1 ... 5).map { "Content \($0)" })
22 | }
23 | }
24 | #endif
25 |
--------------------------------------------------------------------------------
/ec3730/Persistence/HostData.swift:
--------------------------------------------------------------------------------
1 | import CoreData
2 |
3 | public class HostData: NSManagedObject {
4 | @NSManaged public var service: String
5 | @NSManaged public var data: Data
6 | @NSManaged public var date: Date
7 |
8 | convenience init(context: NSManagedObjectContext, service: Service, data: Data) {
9 | guard let entity = NSEntityDescription.entity(forEntityName: "HostDataEntity", in: context) else {
10 | fatalError("No entity named HostData")
11 | }
12 | self.init(entity: entity, insertInto: context)
13 |
14 | self.service = service.name
15 | self.data = data
16 | date = Date()
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ec3730/Views/Host/HostViewSectionFocusView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct HostViewSectionFocusView: View {
4 | @ObservedObject var model: HostSectionModel
5 | var url: URL
6 | var date: Date
7 | var body: some View {
8 | EZPanel {
9 | VStack(spacing: 0) {
10 | ScrollView {
11 | HostViewSectionContent(sectionModel: model, canQuery: true)
12 | }.safeAreaInset(edge: .bottom) {
13 | HostBarView(url: url, date: date)
14 | }
15 | }
16 | .navigationTitle(model.service.name)
17 | .navigationBarTitleDisplayMode(.inline)
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/fastlane/Fastfile:
--------------------------------------------------------------------------------
1 | # This file contains the fastlane.tools configuration
2 | # You can find the documentation at https://docs.fastlane.tools
3 | #
4 | # For a list of all available actions, check out
5 | #
6 | # https://docs.fastlane.tools/actions
7 | #
8 | # For a list of all available plugins, check out
9 | #
10 | # https://docs.fastlane.tools/plugins/available-plugins
11 | #
12 |
13 | # Uncomment the line if you want fastlane to automatically update itself
14 | # update_fastlane
15 |
16 | default_platform(:ios)
17 |
18 | platform :ios do
19 | desc "Description of what the lane does"
20 | lane :custom_lane do
21 | # add actions here: https://docs.fastlane.tools/actions
22 | end
23 | end
24 |
--------------------------------------------------------------------------------
/ec3730/DemoData/WhoIsXmlGeoLocationSectionModel.json:
--------------------------------------------------------------------------------
1 | {
2 | "ip": "8.8.8.8",
3 | "location": {
4 | "country": "US",
5 | "region": "California",
6 | "city": "Mountain View",
7 | "lat": 37.38605,
8 | "lng": -122.08385,
9 | "postalCode": "94035",
10 | "timezone": "-07:00",
11 | "geonameId": 5375480
12 | },
13 | "domains": ["clnbhft.tk", "dijnjshr.ga", "dijnjshr.tk", "essenza.ma", "europarcrental.ma"],
14 | "as": {
15 | "asn": 15169,
16 | "name": "GOOGLE",
17 | "route": "8.8.8.0\/24",
18 | "domain": "https:\/\/about.google\/intl\/en\/",
19 | "type": "Content"
20 | },
21 | "isp": "Google LLC",
22 | "connectionType": ""
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/ec3730/Data Feeds/CoreData/NetUtilsCoreData.xcdatamodeld/Usage.xcdatamodel/contents:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/ec3730Tests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/ec3730UITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/ec3730/ec3730.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | aps-environment
6 | development
7 | com.apple.developer.icloud-container-identifiers
8 |
9 | iCloud.com.twodayslate.netutils
10 |
11 | com.apple.developer.icloud-services
12 |
13 | CloudKit
14 |
15 | com.apple.developer.networking.wifi-info
16 |
17 | com.apple.security.app-sandbox
18 |
19 | com.apple.security.network.client
20 |
21 | com.apple.security.personal-information.location
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ec3730/Models/Device/Sections/FingerprintInfoModel.swift:
--------------------------------------------------------------------------------
1 | import Combine
2 | import DeviceKit
3 | import SwiftUI
4 |
5 | class FingerprintInfoModel: DeviceInfoSectionModel {
6 | @MainActor var models = [FingerPrintModel]()
7 |
8 | override init() {
9 | super.init()
10 | title = "Fingerprints"
11 | }
12 |
13 | @MainActor func attachModel(model: FingerPrintModel) async {
14 | if !models.contains(model) {
15 | models.append(model)
16 | await reload()
17 | }
18 | }
19 |
20 | @MainActor override func reload() async {
21 | enabled = models.count > 0
22 | rows.removeAll()
23 |
24 | for (i, model) in models.enumerated() {
25 | rows.append(.row(title: "Fingerprint \(i)", content: model.fingerprint ?? "-"))
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/ec3730/Views/FSDisclosureGroup.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | struct FSDisclosureGroup