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

feature/add periphery #271

Merged
merged 4 commits into from
Jan 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 5 additions & 0 deletions .periphery.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
schemes:
- Clendar
targets:
- Clendar
workspace: Clendar.xcworkspace
4 changes: 0 additions & 4 deletions Clendar.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
A315FA2625CF0FC300E909DB /* WidgetEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3064D46254CF15500C7F228 /* WidgetEntry.swift */; };
A315FA2C25CF102F00E909DB /* EventSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A38199F925484DB700C71D41 /* EventSection.swift */; };
A315FA3225CF104800E909DB /* DateInfoWidgetEventRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A31202C6254D9E4F009ADB27 /* DateInfoWidgetEventRow.swift */; };
A3187E432549979F009524DF /* UIDatePicker+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3187E422549979F009524DF /* UIDatePicker+Extensions.swift */; };
A3187E68254998EE009524DF /* NewEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3187E67254998EE009524DF /* NewEventView.swift */; };
A3187E6C25499903009524DF /* EventViewerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3187E6B25499903009524DF /* EventViewerViewController.swift */; };
A3187E8125499C29009524DF /* SwiftyFORM in Frameworks */ = {isa = PBXBuildFile; productRef = A3187E8025499C29009524DF /* SwiftyFORM */; };
Expand Down Expand Up @@ -286,7 +285,6 @@
A31258B92551C2A100891CE2 /* AppIconItemCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIconItemCell.swift; sourceTree = "<group>"; };
A31258BE2551C32000891CE2 /* AppIconChooserViewContronller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIconChooserViewContronller.swift; sourceTree = "<group>"; };
A315F9FA25CF04A800E909DB /* ModalWrapperView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalWrapperView.swift; sourceTree = "<group>"; };
A3187E422549979F009524DF /* UIDatePicker+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIDatePicker+Extensions.swift"; sourceTree = "<group>"; };
A3187E67254998EE009524DF /* NewEventView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewEventView.swift; sourceTree = "<group>"; };
A3187E6B25499903009524DF /* EventViewerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventViewerViewController.swift; sourceTree = "<group>"; };
A3187E8425499FE1009524DF /* AppInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppInfo.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -810,7 +808,6 @@
A3B9D9BE25431C36001932B0 /* EKEvent+Extensions.swift */,
A33F843925AF239C001324A0 /* FileManager+Extensions.swift */,
A33F81172247454E009CC46A /* String+Extensions.swift */,
A3187E422549979F009524DF /* UIDatePicker+Extensions.swift */,
A3DCD7BC224A56C600EAE380 /* UIView+Extensions.swift */,
A3F259792247742C009A50B6 /* UIViewController+Extensions.swift */,
A30F5651254AF79900E96C0E /* UserDefaults+Extensions.swift */,
Expand Down Expand Up @@ -1535,7 +1532,6 @@
A3EDE72925669F640046C1F5 /* QuickEventView.swift in Sources */,
A3B9D9E6254331D3001932B0 /* Bool+Extensions.swift in Sources */,
A35B9B5C258CD4A30027E1B3 /* Unwrap.swift in Sources */,
A3187E432549979F009524DF /* UIDatePicker+Extensions.swift in Sources */,
A31258BF2551C32000891CE2 /* AppIconChooserViewContronller.swift in Sources */,
A3209BB9258CEB9E002470CF /* SolidButtonStyle.swift in Sources */,
A33B6D6A25C6EF3000E0C4FA /* MailComposer.swift in Sources */,
Expand Down
17 changes: 0 additions & 17 deletions Clendar/Helper/Extensions/UIDatePicker+Extensions.swift

This file was deleted.

15 changes: 0 additions & 15 deletions Clendar/Helper/Extensions/UIViewController+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,6 @@ extension UIViewController {
removeFromParent()
}

/// Exchange/swap two controllers
///
/// - Parameters:
/// - viewControllerA: the view controller to be exchanged
/// - viewControllerB: the view controller to exchange to
/// - containerView: container view to place viewControllerB
/// - rootViewController: the root view controller
func exchangeViewControllerA(_ viewControllerA: UIViewController?, with viewControllerB: UIViewController?, containerView: UIView?, on rootViewController: UIViewController) {
guard let viewControllerA = viewControllerA else { return }
guard let viewControllerB = viewControllerB else { return }
guard let containerView = containerView else { return }
viewControllerA.removeFromParentViewController()
rootViewController.addChildViewController(viewControllerB, containerView: containerView)
}

static func topViewController(_ baseViewController: UIViewController?) -> UIViewController? {
if baseViewController is UINavigationController {
return topViewController((baseViewController as? UINavigationController)?.visibleViewController)
Expand Down
2 changes: 1 addition & 1 deletion Clendar/Models/ClendarError.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@

import Foundation

public enum ClendarError: Error, LocalizedError {
enum ClendarError: Error, LocalizedError {
case mapFromError(Error)
}
2 changes: 1 addition & 1 deletion Clendar/Modules/Siri Shortcuts/SiriButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import SwiftUI
import IntentsUI

struct SiriButton: UIViewControllerRepresentable {
public let shortcut: INShortcut
let shortcut: INShortcut

func makeUIViewController(context: Context) -> SiriUIViewController {
SiriUIViewController(shortcut: shortcut)
Expand Down
50 changes: 50 additions & 0 deletions scripts/scan_required_reason_API.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

# https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api
searchTerms=(
# File timestamp APIs
"creationDate"
"modificationDate"
"fileModificationDate"
"contentModificationDateKey"
"creationDateKey"
"getattrlist"
"getattrlistbulk"
"fgetattrlist"
"stat"
"fstat"
"fstatat"
"lstat"
"getattrlistat"
# System boot time APIs
"systemUptime"
"mach_absolute_time"
# Disk space APIs
"volumeAvailableCapacityKey"
"volumeAvailableCapacityForImportantUsageKey"
"volumeAvailableCapacityForOpportunisticUsageKey"
"volumeTotalCapacityKey"
"systemFreeSize"
"systemSize"
"statfs"
"statvfs"
"fstatfs"
"fstatvfs"
"getattrlist"
"fgetattrlist"
"getattrlistat"
# Active keyboard APIs
"activeInputModes"
# User defaults APIs
"UserDefaults"
)
search_dir="$1"

if [ -z "$search_dir" ]; then
echo "Usage: $0 <search_dir>"
exit 1
fi

for pattern in "${searchTerms[@]}"; do
find "$search_dir" -type f \( -name "*.swift" -o -name "*.m" \) -exec grep -H -Fw "$pattern" {} +
done
76 changes: 76 additions & 0 deletions scripts/scan_result.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
..//Pods/TPInAppReceipt/Sources/InAppReceipt+ASN1Decodable.swift: creationDate: receiptCreationDate,
..//Pods/TPInAppReceipt/Sources/InAppReceipt.swift: var creationDate: Date
..//Pods/TPInAppReceipt/Sources/InAppReceipt.swift: return payload.creationDate
..//Pods/TPInAppReceipt/Sources/InAppReceiptPayload.swift: let creationDate: Date
..//Pods/TPInAppReceipt/Sources/InAppReceiptPayload.swift: init(bundleIdentifier: String, appVersion: String, originalAppVersion: String, purchases: [InAppPurchase], expirationDate: Date?, bundleIdentifierData: Data, opaqueValue: Data, receiptHash: Data, creationDate: Date, ageRating: String, environment: String, rawData: Data)
..//Pods/TPInAppReceipt/Sources/InAppReceiptPayload.swift: self.creationDate = creationDate
..//Pods/RevenueCat/Sources/LocalReceiptParsing/BasicTypes/AppleReceipt.swift: creationDate = 12,
..//Pods/RevenueCat/Sources/LocalReceiptParsing/BasicTypes/AppleReceipt.swift: let creationDate: Date
..//Pods/RevenueCat/Sources/LocalReceiptParsing/BasicTypes/AppleReceipt.swift: "creationDate": creationDate,
..//Pods/RevenueCat/Sources/LocalReceiptParsing/Builders/AppleReceiptBuilder.swift: var creationDate: Date?
..//Pods/RevenueCat/Sources/LocalReceiptParsing/Builders/AppleReceiptBuilder.swift: case .creationDate:
..//Pods/RevenueCat/Sources/LocalReceiptParsing/Builders/AppleReceiptBuilder.swift: creationDate = internalContainer.internalPayload.toDate()
..//Pods/RevenueCat/Sources/LocalReceiptParsing/Builders/AppleReceiptBuilder.swift: let nonOptionalCreationDate = creationDate else {
..//Pods/RevenueCat/Sources/LocalReceiptParsing/Builders/AppleReceiptBuilder.swift: creationDate: nonOptionalCreationDate,
..//Clendar/Modules/Calendar/Event List/EventListTableViewCell.swift: dateDisplay = event.creationDate?.toDateString ?? ""
..//Pods/RevenueCat/Sources/Misc/SynchronizedUserDefaults.swift:/// A `UserDefaults` wrapper to synchronize access and writes.
..//Pods/RevenueCat/Sources/Misc/SynchronizedUserDefaults.swift: private let atomic: Atomic<UserDefaults>
..//Pods/RevenueCat/Sources/Misc/SynchronizedUserDefaults.swift: init(userDefaults: UserDefaults) {
..//Pods/RevenueCat/Sources/Misc/SynchronizedUserDefaults.swift: func read<T>(_ action: (UserDefaults) throws -> T) rethrows -> T {
..//Pods/RevenueCat/Sources/Misc/SynchronizedUserDefaults.swift: func write(_ action: (UserDefaults) throws -> Void) rethrows {
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: userDefaults: UserDefaults? = nil,
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: let userDefaults = userDefaults ?? UserDefaults.standard
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: * Configures an instance of the Purchases SDK with a custom `UserDefaults`.
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: * Configures an instance of the Purchases SDK with a custom `UserDefaults`.
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: * - Parameter userDefaults: Custom `UserDefaults` to use
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: userDefaults: UserDefaults?) -> Purchases {
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: * - Parameter userDefaults: Custom `UserDefaults` to use
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: userDefaults: UserDefaults?,
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: * - Parameter userDefaults: Custom `UserDefaults` to use
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: userDefaults: UserDefaults?,
..//Pods/RevenueCat/Sources/Purchasing/Purchases.swift: userDefaults: UserDefaults?,
..//Pods/RevenueCat/Sources/Networking/ETagManager.swift: userDefaults: UserDefaults(suiteName: ETagManager.suiteName) ?? UserDefaults.standard
..//Pods/RevenueCat/Sources/Networking/ETagManager.swift: init(userDefaults: UserDefaults) {
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: /// Keeps track of whether user ID has been set to detect users clearing `UserDefaults`
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: userDefaults: UserDefaults = UserDefaults.standard) {
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: userDefaults: UserDefaults = UserDefaults.standard,
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: name: UserDefaults.didChangeNotification,
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: guard let userDefaults = notification.object as? UserDefaults else {
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift:// All methods that modify or read from the UserDefaults data source but require external mechanisms for ensuring
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: static func appUserIDsWithLegacyAttributes(_ userDefaults: UserDefaults) -> [String] {
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: static func cachedAppUserID(_ userDefaults: UserDefaults) -> String? {
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: static func storedAttributesForAllUsers(_ userDefaults: UserDefaults) -> [String: Any] {
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: _ userDefaults: UserDefaults,
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: _ userDefaults: UserDefaults,
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: _ userDefaults: UserDefaults,
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: _ userDefaults: UserDefaults,
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: _ userDefaults: UserDefaults,
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: _ userDefaults: UserDefaults,
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: _ userDefaults: UserDefaults,
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: static func migrateSubscriberAttributes(_ userDefaults: UserDefaults) {
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift: _ userDefaults: UserDefaults
..//Pods/RevenueCat/Sources/Caching/DeviceCache.swift:fileprivate extension UserDefaults {
..//Pods/RevenueCat/Sources/Logging/Strings/IdentityStrings.swift: return "currentAppUserID is nil. This might happen if the cache in UserDefaults is unintentionally cleared."
..//Clendar/Models/CalendarIdentifer.swift: if let selectedCalendarIdentifier = CalendarIdentifier(rawValue: UserDefaults.selectedCalendarIdentifier) {
..//Clendar/Models/CalendarIdentifer.swift: if let firstWeekDayIndex = instance.weekdaySymbols.firstIndex(of: UserDefaults.firstWeekDay),
..//Clendar/Modules/Settings/SettingsViewController.swift: UserDefaults.selectedCalendarIdentifier = calendarIdentifier.rawValue
..//Clendar/Modules/Settings/SettingsViewController.swift: instance.selectOptionWithTitle(UserDefaults.firstWeekDay)
..//Clendar/Modules/Settings/SettingsViewController.swift: UserDefaults.firstWeekDay = value
..//Clendar/Modules/Settings/SettingsViewController.swift: let selected = TimeAndHourFormat(rawValue: UserDefaults.timeFormat)?.localizedTitle ?? ""
..//Clendar/Modules/Settings/SettingsViewController.swift: UserDefaults.timeFormat = TimeAndHourFormat.mapFromTitle(selected.title).rawValue
..//Clendar/Modules/Calendar Chooser/SingleCalendarChooserViewController.swift: UserDefaults.defaultCalendarName = name
..//Clendar/Modules/Calendar Chooser/MultipleCalendarsChooserViewController.swift: UserDefaults.savedCalendarIDs = calendarIDs
..//Clendar/Helper/Utils/UserDefaultsWrapper.swift: var container: UserDefaults = UserDefaults.groupUserDefaults
..//Clendar/Helper/Utils/RatingManager.swift: let userDefaults: UserDefaults
..//Clendar/Helper/Utils/RatingManager.swift: init(userDefaults: UserDefaults = UserDefaults.standard) {
..//Clendar/Helper/Extensions/EKEvent+Extensions.swift: let savedCalendarIDs = UserDefaults.savedCalendarIDs
..//Clendar/Helper/Extensions/EKEvent+Extensions.swift: let name = UserDefaults.defaultCalendarName
..//Clendar/Helper/Extensions/UserDefaults+Extensions.swift:// UserDefaults+Extensions.swift
..//Clendar/Helper/Extensions/UserDefaults+Extensions.swift:extension UserDefaults {
..//Clendar/Helper/Extensions/UserDefaults+Extensions.swift: static let groupUserDefaults = UserDefaults(suiteName: "group.com.vinhnx.Clendar")!
..//Clendar/Helper/Extensions/UserDefaults+Extensions.swift:extension UserDefaults {
..//Clendar/Helper/Extensions/UserDefaults+Extensions.swift: TimeAndHourFormat(rawValue: UserDefaults.timeFormat) ?? TimeAndHourFormat.hhmm
..//Clendar/Helper/Extensions/Date+Extensions.swift: format: UserDefaults.timeAndHourFormat.format,
..//Clendar/Helper/Extensions/Date+Extensions.swift: let format = String("EEEE, MMM d, yyyy. \(UserDefaults.timeAndHourFormat.format)")
..//Clendar/Base/ContentViewModifier.swift: try await eventKitWrapper.fetchEvents(for: date, filterCalendarIDs: UserDefaults.savedCalendarIDs, calendar: CalendarIdentifier.current.calendar)
..//Clendar/Base/ContentView.swift: try await eventKitWrapper.fetchEvents(for: date, filterCalendarIDs: UserDefaults.savedCalendarIDs, calendar: CalendarIdentifier.current.calendar)
Loading