: View {
-
- private let content: Content
-
- init(@ViewBuilder content: () -> Content) {
- self.content = content()
- }
-
- var body: some View {
- ScrollView {
- VStack { content }
- .padding()
- }
- .background(Color(UIColor.systemGroupedBackground))
- }
-}
diff --git a/OCKCatalog/OCKCatalog/CatalogView.swift b/OCKCatalog/OCKCatalog/CatalogView.swift
deleted file mode 100644
index c7ab9406e..000000000
--- a/OCKCatalog/OCKCatalog/CatalogView.swift
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import CareKitStore
-import Foundation
-import HealthKit
-import SwiftUI
-
-struct CatalogView: View {
-
- @State private var didRequestHealthKitAccess = false
- @State private var isHealthKitAvailable = false
-
- @ViewBuilder var body: some View {
-
- // Placeholder background while requesting HealthKit permissions
- if !UIApplication.isRunningTest && !didRequestHealthKitAccess {
- Color(UIColor.secondarySystemGroupedBackground)
- .onAppear {
- requestHealthKitAccess { success, error in
- if !success { print(["[ERROR]", error!.localizedDescription].joined()) }
- didRequestHealthKitAccess = true
- isHealthKitAvailable = success
- }
- }
-
- // HealthKit is not available - show placeholder text
- } else if !UIApplication.isRunningTest && !isHealthKitAvailable {
- Text("Please enable HealthKit access in Settings")
- .font(Font(UIFont.preferredFont(forTextStyle: .title3)))
- .foregroundColor(.secondary)
- .multilineTextAlignment(.center)
- .padding()
-
- // HealthKit is available - show the main view
- } else {
- NavigationView {
- List {
- TaskSection()
- ContactSection()
- ChartSection()
- MiscellaneousSection()
- HigherOrderSection()
- }
- .listStyle(GroupedListStyle())
- .navigationBarTitle(Text("CareKit Catalog"), displayMode: .inline)
- }
- }
- }
-
- func requestHealthKitAccess(completion: @escaping (Bool, Error?) -> Void) {
- let healthStore = HKHealthStore()
- let allTypes = Set([HKObjectType.quantityType(forIdentifier: .stepCount)!])
- healthStore.requestAuthorization(toShare: nil, read: allTypes, completion: completion)
- }
-}
diff --git a/OCKCatalog/OCKCatalog/Extensions/Environment+StoreManager.swift b/OCKCatalog/OCKCatalog/Extensions/Environment+StoreManager.swift
deleted file mode 100644
index 0eb7a17e2..000000000
--- a/OCKCatalog/OCKCatalog/Extensions/Environment+StoreManager.swift
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import Foundation
-import SwiftUI
-
-private struct StoreManagerEnvironmentKey: EnvironmentKey {
-
- static var defaultValue: OCKSynchronizedStoreManager {
- let appDelegate = UIApplication.shared.delegate as! AppDelegate
- return appDelegate.storeManager
- }
-}
-
-public extension EnvironmentValues {
-
- var storeManager: OCKSynchronizedStoreManager {
- get { self[StoreManagerEnvironmentKey.self] }
- set { self[StoreManagerEnvironmentKey.self] = newValue }
- }
-}
diff --git a/OCKCatalog/OCKCatalog/Extensions/OCKHealthKitStore+Extension.swift b/OCKCatalog/OCKCatalog/Extensions/OCKHealthKitStore+Extension.swift
deleted file mode 100644
index e3177fa7b..000000000
--- a/OCKCatalog/OCKCatalog/Extensions/OCKHealthKitStore+Extension.swift
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- Copyright (c) 2019, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import CareKitStore
-import Foundation
-
-extension OCKHealthKitPassthroughStore {
-
- enum Tasks: String, CaseIterable {
- case steps
- }
-
- func fillWithDummyData() {
- // Note: If the tasks and contacts already exist in the store, these methods will fail. If you have modified the data and would like the
- // changes to be reflected in the app, delete and reinstall the catalog app.
- let aFewDaysAgo = Calendar.current.startOfDay(for: Calendar.current.date(byAdding: .day, value: -10, to: Date())!)
- addAnyTasks(makeTasks(on: aFewDaysAgo), callbackQueue: .main) { result in
- switch result {
- case .failure(let error): print("[ERROR] \(error.localizedDescription)")
- case .success: break
- }
- }
- }
-
- private func makeTasks(on start: Date) -> [OCKAnyTask] {
- // Steps task
- let stepsScheduleElement = OCKScheduleElement(start: start, end: nil, interval: .init(day: 1),
- text: nil, targetValues: [OCKOutcomeValue(500.0)], duration: .allDay)
- let hkLinkage = OCKHealthKitLinkage(quantityIdentifier: .stepCount, quantityType: .cumulative, unit: .count())
- var stepsTask = OCKHealthKitTask(id: Tasks.steps.rawValue, title: "Steps", carePlanUUID: nil,
- schedule: .init(composing: [stepsScheduleElement]), healthKitLinkage: hkLinkage)
- stepsTask.instructions = "A walk a day keeps the doctor away."
-
- return [stepsTask]
- }
-}
diff --git a/OCKCatalog/OCKCatalog/Extensions/OCKStore+Extensions.swift b/OCKCatalog/OCKCatalog/Extensions/OCKStore+Extensions.swift
deleted file mode 100644
index 29d8c02e6..000000000
--- a/OCKCatalog/OCKCatalog/Extensions/OCKStore+Extensions.swift
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- Copyright (c) 2019, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import CareKitStore
-import Foundation
-
-extension OCKSchedule {
- /// Create a schedule that happens at meal times every day of the week.
- static func mealTimesEachDay(start: Date, end: Date?) -> OCKSchedule {
- let startDate = Calendar.current.startOfDay(for: start)
- let breakfast = OCKSchedule.dailyAtTime(hour: 7, minutes: 30, start: startDate, end: end, text: "Breakfast")
- let lunch = OCKSchedule.dailyAtTime(hour: 12, minutes: 0, start: startDate, end: end, text: "Lunch")
- let dinner = OCKSchedule.dailyAtTime(hour: 17, minutes: 30, start: startDate, end: end, text: "Dinner")
- return OCKSchedule(composing: [breakfast, lunch, dinner])
- }
-}
-
-extension OCKStore {
-
- enum Tasks: String, CaseIterable {
- case doxylamine
- case nausea
- }
-
- enum Contacts: String, CaseIterable {
- case lexi = "lexi-torres"
- case matthew = "matthew-reiff"
- }
-
- func fillWithDummyData() {
- // Note: If the tasks and contacts already exist in the store, these methods will fail. If you have modified the data and would like the
- // changes to be reflected in the app, delete and reinstall the catalog app.
- let aFewDaysAgo = Calendar.current.startOfDay(for: Calendar.current.date(byAdding: .day, value: -10, to: Date())!)
- addTasks(makeTasks(on: aFewDaysAgo), callbackQueue: .main) { result in
- switch result {
- case .failure(let error): print("[ERROR] \(error.localizedDescription)")
- case .success: break
- }
- }
-
- addContacts(makeContacts(), callbackQueue: .main) { result in
- switch result {
- case .failure(let error): print("[ERROR] \(error.localizedDescription)")
- case .success: break
- }
- }
- }
-
- private func makeTasks(on start: Date) -> [OCKTask] {
- var task1 = OCKTask(id: Tasks.nausea.rawValue, title: "Nausea", carePlanUUID: nil,
- schedule: .dailyAtTime(hour: 7, minutes: 0, start: start, end: nil, text: nil))
- task1.instructions = "Log any time you experience nausea."
- task1.impactsAdherence = false
-
- var task2 = OCKTask(id: Tasks.doxylamine.rawValue, title: "Doxylamine", carePlanUUID: nil,
- schedule: .mealTimesEachDay(start: start, end: nil))
- task2.instructions = "Take the tablet with a full glass of water."
- task2.asset = "pills"
- return [task1, task2]
- }
-
- private func makeContacts() -> [OCKContact] {
- var contact1 = OCKContact(id: Contacts.lexi.rawValue, givenName: "Lexi", familyName: "Torres", carePlanUUID: nil)
- contact1.role = "Dr. Torres is a family practice doctor with over 20 years of experience."
- let phoneNumbers1 = [OCKLabeledValue(label: "work", value: "2135558479")]
- contact1.phoneNumbers = phoneNumbers1
- contact1.title = "Family Practice"
- contact1.messagingNumbers = phoneNumbers1
- contact1.emailAddresses = [OCKLabeledValue(label: "work", value: "lexitorres@icloud.com")]
- let address1 = OCKPostalAddress()
- address1.street = "26 E Centerline Rd"
- address1.city = "Victor"
- address1.state = "MI"
- address1.postalCode = "48848"
- contact1.address = address1
-
- var contact2 = OCKContact(id: Contacts.matthew.rawValue, givenName: "Matthew", familyName: "Reiff", carePlanUUID: nil)
- contact2.role = "Dr. Reiff is a family practice doctor with over 20 years of experience."
- contact2.title = "Family Practice"
- let phoneNumbers2 = [OCKLabeledValue(label: "work", value: "7745550146")]
- contact2.phoneNumbers = phoneNumbers2
- contact2.messagingNumbers = phoneNumbers2
- contact2.emailAddresses = [OCKLabeledValue(label: "work", value: "matthewreiff@icloud.com")]
- let address2 = OCKPostalAddress()
- address2.street = "9391 Burkshire Avenue"
- address2.city = "Cardiff"
- address2.state = "CA"
- address2.postalCode = "92007"
- contact2.address = address2
-
- return [contact1, contact2]
- }
-}
diff --git a/OCKCatalog/OCKCatalog/Extensions/UIApplication+Extension.swift b/OCKCatalog/OCKCatalog/Extensions/UIApplication+Extension.swift
deleted file mode 100644
index fcd4f1762..000000000
--- a/OCKCatalog/OCKCatalog/Extensions/UIApplication+Extension.swift
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-import UIKit
-
-extension UIApplication {
- static var isRunningTest: Bool {
- return ProcessInfo().arguments.contains("test")
- }
-}
diff --git a/OCKCatalog/OCKCatalog/FeaturedContentViewController.swift b/OCKCatalog/OCKCatalog/FeaturedContentViewController.swift
deleted file mode 100644
index 63f82d545..000000000
--- a/OCKCatalog/OCKCatalog/FeaturedContentViewController.swift
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import CareKitUI
-import Foundation
-import UIKit
-
-class FeaturedContentViewController: UIViewController, OCKFeaturedContentViewDelegate {
-
- static let html = """
- It's tough balancing a busy schedule. During the busiest of times, healthy routines are often the first things we sacrifice to \
- make more room in the day for work or family. But sacrificing healthy \
- habits will end up hurting us in the long run - They give us strength and energy to go about our day. Preparing healthy meals doesn'tq \
- require exotic ingredients and endless time in the kitchen.
\
-
\
- Avocado Tomato Toast
\
- 10 minutes
-
\
- Avocados are everywhere these days, and for good reason. They're incredibly filling and a great replacement for other foods that /
- are high in fat. Sprinkle on some granulated garlic and a touch of red pepper if you're feeling adventurous.
- """
-
- static let css = """
- .headline { \
- font-size: 23px; \
- font-weight: 700; \
- }
-
- .subheadline { \
- font-size: 15px; \
- font-weight: 300; \
- } \
- p { \
- padding: 0px; \
- margin: 0px; \
- }
- """
-
- private let imageOverlayStyle: UIUserInterfaceStyle
-
- lazy var featuredContentView: OCKFeaturedContentView = {
- let view = OCKFeaturedContentView(imageOverlayStyle: imageOverlayStyle)
- view.delegate = self
- return view
- }()
-
- init(imageOverlayStyle: UIUserInterfaceStyle = .unspecified) {
- self.imageOverlayStyle = imageOverlayStyle
- super.init(nibName: nil, bundle: nil)
- }
-
- @available(*, unavailable)
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- @available(*, unavailable)
- override func loadView() {
- view = featuredContentView
- }
-
- func didTapView(_ view: OCKFeaturedContentView) {
- let detailViewController = OCKDetailViewController(html: .init(html: Self.html, css: Self.css),
- imageOverlayStyle: .unspecified, showsCloseButton: true)
-
- // Copy over data
- detailViewController.detailView.imageView.image = featuredContentView.imageView.image
- detailViewController.detailView.imageLabel.text = featuredContentView.label.text
-
- present(detailViewController, animated: true)
- }
-}
diff --git a/OCKCatalog/OCKCatalog/Info.plist b/OCKCatalog/OCKCatalog/Info.plist
deleted file mode 100644
index b8f018923..000000000
--- a/OCKCatalog/OCKCatalog/Info.plist
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleDisplayName
- OCKCatalog
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.0
- CFBundleVersion
- $(CURRENT_PROJECT_VERSION)
- LSRequiresIPhoneOS
-
- NSHealthShareUsageDescription
- This app links tasks in a care plan to data in HealthKit.
- UIApplicationSceneManifest
-
- UIApplicationSupportsMultipleScenes
-
- UISceneConfigurations
-
- UIWindowSceneSessionRoleApplication
-
-
- UISceneConfigurationName
- Default Configuration
- UISceneDelegateClassName
- $(PRODUCT_MODULE_NAME).SceneDelegate
-
-
-
-
- UILaunchStoryboardName
- LaunchScreen
- UIRequiredDeviceCapabilities
-
- armv7
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
-
-
diff --git a/OCKCatalog/OCKCatalog/OCKCatalog.entitlements b/OCKCatalog/OCKCatalog/OCKCatalog.entitlements
deleted file mode 100644
index 2ab14a262..000000000
--- a/OCKCatalog/OCKCatalog/OCKCatalog.entitlements
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
- com.apple.developer.healthkit
-
- com.apple.developer.healthkit.access
-
-
-
diff --git a/OCKCatalog/OCKCatalog/PlatformPicker.swift b/OCKCatalog/OCKCatalog/PlatformPicker.swift
deleted file mode 100644
index 44deb047b..000000000
--- a/OCKCatalog/OCKCatalog/PlatformPicker.swift
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-import SwiftUI
-
-struct PlatformPicker: View {
-
- @State private var selectedPlatform = 0
-
- private let platforms = ["UIKit", "SwiftUI"]
- private let uiKitView: UIKitView
- private let swiftUIView: SwiftUIView
-
- init(@ViewBuilder uiKitView: () -> UIKitView, @ViewBuilder swiftUIView: () -> SwiftUIView) {
- self.uiKitView = uiKitView()
- self.swiftUIView = swiftUIView()
- }
-
- var body: some View {
- VStack(spacing: 0) {
-
- VStack {
-
- Picker(selection: $selectedPlatform, label: Text("Platform")) {
- ForEach(0.. UIViewController {
- let listViewController = OCKListViewController()
-
- let spacer = UIView(frame: .init(origin: .zero, size: .init(width: 0, height: 32)))
- listViewController.appendView(spacer, animated: false)
-
- let viewController = makeChartViewController()
-
- listViewController.appendViewController(viewController, animated: false)
- return listViewController
- }
-
- func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
-
- private func makeChartViewController() -> UIViewController {
- let gradientStart = UIColor { traitCollection -> UIColor in
- return traitCollection.userInterfaceStyle == .light ? #colorLiteral(red: 0.9960784314, green: 0.3725490196, blue: 0.368627451, alpha: 1) : #colorLiteral(red: 0.8627432641, green: 0.2630574384, blue: 0.2592858295, alpha: 1)
- }
- let gradientEnd = UIColor { traitCollection -> UIColor in
- return traitCollection.userInterfaceStyle == .light ? #colorLiteral(red: 0.9960784314, green: 0.4732026144, blue: 0.368627451, alpha: 1) : #colorLiteral(red: 0.8627432641, green: 0.3598620686, blue: 0.2592858295, alpha: 1)
- }
-
- let markerSize: CGFloat = style == .bar ? 10 : 2
- let startOfDay = Calendar.current.startOfDay(for: Date())
- let configurations = [
- OCKDataSeriesConfiguration(
- taskID: OCKStore.Tasks.doxylamine.rawValue,
- legendTitle: OCKStore.Tasks.doxylamine.rawValue.capitalized,
- gradientStartColor: gradientStart,
- gradientEndColor: gradientEnd,
- markerSize: markerSize,
- eventAggregator: .countOutcomeValues)
- ]
-
- let chartViewController = OCKCartesianChartViewController(plotType: style, selectedDate: startOfDay,
- configurations: configurations, storeManager: storeManager)
- chartViewController.chartView.headerView.titleLabel.text = OCKStore.Tasks.doxylamine.rawValue.capitalized
- return chartViewController
- }
-
-}
diff --git a/OCKCatalog/OCKCatalog/Sections/ContactSection.swift b/OCKCatalog/OCKCatalog/Sections/ContactSection.swift
deleted file mode 100644
index aa77050d4..000000000
--- a/OCKCatalog/OCKCatalog/Sections/ContactSection.swift
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import CareKitStore
-import Foundation
-import SwiftUI
-
-struct ContactSection: View {
-
- var body: some View {
- Section(header: Text("Contact")) {
- ForEach(ContactStyle.allCases, id: \.rawValue) { style in
- NavigationLink(style.rawValue.capitalized, destination: ContactDestination(style: style))
- }
- }
- }
-}
-
-private struct ContactDestination: View {
-
- @Environment(\.storeManager) private var storeManager
-
- let style: ContactStyle
-
- var body: some View {
- ZStack {
- Color(UIColor.systemGroupedBackground)
- .edgesIgnoringSafeArea(.all)
- AdaptedTaskView(style: style, storeManager: storeManager)
- }
- .navigationBarTitle(Text(style.rawValue.capitalized), displayMode: .inline)
- }
-}
-
-private enum ContactStyle: String, CaseIterable {
- case simple, detailed
-}
-
-private struct AdaptedTaskView: UIViewControllerRepresentable {
-
- let style: ContactStyle
- let storeManager: OCKSynchronizedStoreManager
-
- func makeUIViewController(context: Context) -> UIViewController {
- let listViewController = OCKListViewController()
-
- let spacer = UIView(frame: .init(origin: .zero, size: .init(width: 0, height: 32)))
- listViewController.appendView(spacer, animated: false)
-
- let viewController: UIViewController?
- switch style {
- case .simple:
- viewController = OCKSimpleContactViewController(contactID: OCKStore.Contacts.matthew.rawValue, storeManager: storeManager)
- case .detailed:
- viewController = OCKDetailedContactViewController(contactID: OCKStore.Contacts.matthew.rawValue, storeManager: storeManager)
- }
-
- viewController.map { listViewController.appendViewController($0, animated: false) }
- return listViewController
- }
-
- func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
-}
diff --git a/OCKCatalog/OCKCatalog/Sections/HigherOrderSection.swift b/OCKCatalog/OCKCatalog/Sections/HigherOrderSection.swift
deleted file mode 100644
index 04964c6b6..000000000
--- a/OCKCatalog/OCKCatalog/Sections/HigherOrderSection.swift
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import CareKitStore
-import Foundation
-import SwiftUI
-
-struct HigherOrderSection: View {
-
- var body: some View {
- Section(header: Text("Higher Order")) {
- ForEach(HigherOrderStyle.allCases, id: \.rawValue) { style in
- NavigationLink(style.rawValue.capitalized, destination: HigherOrderDestination(style: style))
- }
- }
- }
-}
-
-private struct HigherOrderDestination: View {
-
- @Environment(\.storeManager) private var storeManager
-
- let style: HigherOrderStyle
-
- var body: some View {
- AdaptedHigherOrderView(style: style, storeManager: storeManager)
- .edgesIgnoringSafeArea(.bottom)
- .navigationBarTitle(Text(style.rawValue.capitalized), displayMode: .inline)
- }
-}
-
-private enum HigherOrderStyle: String, CaseIterable {
- case tasks, contacts
-}
-
-private struct AdaptedHigherOrderView: UIViewControllerRepresentable {
-
- let style: HigherOrderStyle
- let storeManager: OCKSynchronizedStoreManager
-
- func makeUIViewController(context: Context) -> UIViewController {
- switch style {
- case .tasks:
- return OCKDailyTasksPageViewController(storeManager: storeManager)
- case .contacts:
- return OCKContactsListViewController(storeManager: storeManager)
- }
- }
-
- func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
-}
diff --git a/OCKCatalog/OCKCatalog/Sections/MiscellaneousSection.swift b/OCKCatalog/OCKCatalog/Sections/MiscellaneousSection.swift
deleted file mode 100644
index 0888c20f1..000000000
--- a/OCKCatalog/OCKCatalog/Sections/MiscellaneousSection.swift
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import CareKitStore
-import CareKitUI
-import Contacts
-import Foundation
-import SwiftUI
-
-struct MiscellaneousSection: View {
-
- var body: some View {
- Section(header: Text("Miscellaneous")) {
- ForEach(MiscellaneousStyle.allCases, id: \.rawValue) { style in
- if style.supportsSwiftUI || style.supportsUIKit {
- NavigationLink(style.rawValue.capitalized, destination: MiscellaneousDestination(style: style))
- }
- }
- }
- }
-}
-
-private struct MiscellaneousDestination: View {
-
- @Environment(\.storeManager) private var storeManager
-
- let style: MiscellaneousStyle
-
- var body: some View {
- ZStack {
- Color(UIColor.systemGroupedBackground)
- .edgesIgnoringSafeArea(.all)
-
- if style.supportsSwiftUI && style.supportsUIKit {
- PlatformPicker {
- AdaptedMiscellaneousView(style: style)
- } swiftUIView: {
- if #available(iOS 14, *) {
- MiscellaneousView(style: style)
- }
- }
- } else if style.supportsUIKit {
- AdaptedMiscellaneousView(style: style)
- } else if style.supportsSwiftUI, #available(iOS 14, *) {
- MiscellaneousView(style: style)
- }
- }
- .navigationBarTitle(Text(style.rawValue.capitalized), displayMode: .inline)
- }
-}
-
-private enum MiscellaneousStyle: String, CaseIterable {
-
- case link, featuredContent = "featured content"
-
- var supportsSwiftUI: Bool {
- switch self {
- case .link: return true
- case .featuredContent: return false
- }
- }
-
- var supportsUIKit: Bool {
- switch self {
- case .featuredContent: return true
- case .link: return false
- }
- }
-}
-
-@available(iOS 14, *)
-private struct MiscellaneousView: View {
-
- var links: [CareKitUI.LinkItem] {
- [
- .website("https://www.apple.com", title: "Apple"),
- .call(phoneNumber: "2135558479", title: "Call"),
- .message(phoneNumber: "2135558479", title: "Message"),
- .email(recipient: "lexitorres@icloud.com", title: "Email"),
- .appStore(id: "0", title: "App Store"),
- .location("37.331686", "-122.030656", title: "Address")
- ]
- }
-
- let style: MiscellaneousStyle
-
- var body: some View {
- CardBackground {
- switch style {
- case .link:
- LinkView(title: Text("Links"), links: links)
- default:
- EmptyView()
- }
- }
- }
-}
-
-private struct AdaptedMiscellaneousView: UIViewControllerRepresentable {
-
- let style: MiscellaneousStyle
-
- func makeUIViewController(context: Context) -> UIViewController {
- let listViewController = OCKListViewController()
-
- let spacer = UIView(frame: .init(origin: .zero, size: .init(width: 0, height: 32)))
- listViewController.appendView(spacer, animated: false)
-
- let viewController: UIViewController?
- switch style {
- case .featuredContent:
- let featuredContentViewController = FeaturedContentViewController()
- featuredContentViewController.featuredContentView.imageView.image = UIImage(systemName: "heart.fill")
- viewController = featuredContentViewController
- case .link:
- viewController = nil
- }
-
- viewController.map { listViewController.appendViewController($0, animated: false) }
- return listViewController
- }
-
- func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
-}
diff --git a/OCKCatalog/OCKCatalog/Sections/TaskSection.swift b/OCKCatalog/OCKCatalog/Sections/TaskSection.swift
deleted file mode 100644
index 567ac7b40..000000000
--- a/OCKCatalog/OCKCatalog/Sections/TaskSection.swift
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import CareKitStore
-import CareKitUI
-import Foundation
-import SwiftUI
-
-struct TaskSection: View {
-
- var body: some View {
- Section(header: Text("Task")) {
- ForEach(TaskStyle.allCases, id: \.rawValue) { style in
- if style.supportsSwiftUI || style.supportsUIKit {
- NavigationLink(style.rawValue.capitalized, destination: TaskDestination(style: style))
- }
- }
- }
- }
-}
-
-private struct TaskDestination: View {
-
- @Environment(\.storeManager) private var storeManager
-
- let style: TaskStyle
-
- var body: some View {
- ZStack {
- Color(UIColor.systemGroupedBackground)
- .edgesIgnoringSafeArea(.all)
-
- if style.supportsSwiftUI && style.supportsUIKit {
- PlatformPicker {
- AdaptedTaskView(style: style, storeManager: storeManager)
- } swiftUIView: {
- if #available(iOS 14, *) {
- TaskView(style: style)
- }
- }
- } else if style.supportsUIKit {
- AdaptedTaskView(style: style, storeManager: storeManager)
- } else if style.supportsSwiftUI {
- if #available(iOS 14, *) {
- TaskView(style: style)
- }
- }
- }
- .navigationBarTitle(Text(style.rawValue.capitalized), displayMode: .inline)
- }
-}
-
-private enum TaskStyle: String, CaseIterable {
-
- case grid, checklist
- case simple, instructions, labeledValue = "labeled value", numericProgress = "Numeric Progress"
- case buttonLog = "button log"
-
- var supportsSwiftUI: Bool {
- guard #available(iOS 14, *) else { return false }
-
- switch self {
- case .simple, .instructions, .labeledValue, .numericProgress: return true
- case .grid, .checklist, .buttonLog: return false
- }
- }
-
- var supportsUIKit: Bool {
- switch self {
- case .simple, .instructions, .grid, .checklist, .buttonLog: return true
- case .labeledValue, .numericProgress: return false
- }
- }
-}
-
-@available(iOS 14.0, *)
-private struct TaskView: View {
-
- @Environment(\.storeManager) private var storeManager
-
- let style: TaskStyle
-
- var body: some View {
- CardBackground {
- switch style {
- case .simple:
- SimpleTaskView(taskID: OCKStore.Tasks.doxylamine.rawValue,
- eventQuery: .init(for: Date()), storeManager: storeManager)
- case .instructions:
- InstructionsTaskView(taskID: OCKStore.Tasks.doxylamine.rawValue,
- eventQuery: .init(for: Date()), storeManager: storeManager)
- case .numericProgress:
- VStack(spacing: 16) {
- // Linked to HealthKit data
- CareKit.NumericProgressTaskView(taskID: OCKHealthKitPassthroughStore.Tasks.steps.rawValue,
- eventQuery: .init(for: Date()), storeManager: storeManager) { controller in
- CareKitUI.NumericProgressTaskView(title: Text((controller.viewModel?.title ?? "") + " (HealthKit Linked)"),
- detail: controller.viewModel?.detail.map(Text.init),
- progress: Text(controller.viewModel?.progress ?? ""),
- goal: Text(controller.viewModel?.goal ?? ""),
- instructions: controller.viewModel?.instructions.map(Text.init),
- isComplete: controller.viewModel?.isComplete ?? false)
- }
-
- // Static view
- CareKitUI.NumericProgressTaskView(title: Text("Steps (Static)"),
- progress: Text("0"),
- goal: Text("100"),
- isComplete: false)
-
- // Static view
- CareKitUI.NumericProgressTaskView(title: Text("Steps (Static)"),
- progress: Text("0"),
- goal: Text("100"),
- isComplete: true)
- }
- case .labeledValue:
- VStack(spacing: 16) {
-
- // HealthKit linked view
- CareKit.LabeledValueTaskView(taskID: OCKHealthKitPassthroughStore.Tasks.steps.rawValue,
- eventQuery: .init(for: Date()), storeManager: storeManager) { controller in
- CareKitUI.LabeledValueTaskView(title: Text((controller.viewModel?.title ?? "") + " (HealthKit Linked)"),
- detail: controller.viewModel?.detail.map(Text.init),
- state: .fromViewModel(state: controller.viewModel?.state))
- }
-
- // Static view
- LabeledValueTaskView(title: Text("Heart Rate (Static)"),
- detail: Text("Anytime"),
- state: .complete(Text("62"), Text("BPM")))
-
- // Static view
- LabeledValueTaskView(title: Text("Heart Rate (Static)"),
- detail: Text("Anytime"),
- state: .incomplete(Text("NO DATA")))
- }
- default:
- EmptyView()
- }
- }
- }
-}
-
-private struct AdaptedTaskView: UIViewControllerRepresentable {
-
- let style: TaskStyle
- let storeManager: OCKSynchronizedStoreManager
-
- func makeUIViewController(context: Context) -> UIViewController {
- let listViewController = OCKListViewController()
-
- let spacer = UIView(frame: .init(origin: .zero, size: .init(width: 0, height: 32)))
- listViewController.appendView(spacer, animated: false)
-
- let taskViewController: UIViewController?
- switch style {
- case .simple:
- taskViewController = OCKSimpleTaskViewController(taskID: OCKStore.Tasks.doxylamine.rawValue,
- eventQuery: .init(for: Date()), storeManager: storeManager)
- case .instructions:
- taskViewController = OCKInstructionsTaskViewController(taskID: OCKStore.Tasks.doxylamine.rawValue,
- eventQuery: .init(for: Date()), storeManager: storeManager)
- case .buttonLog:
- taskViewController = OCKButtonLogTaskViewController(taskID: OCKStore.Tasks.nausea.rawValue,
- eventQuery: .init(for: Date()), storeManager: storeManager)
- case .checklist:
- taskViewController = OCKChecklistTaskViewController(taskID: OCKStore.Tasks.doxylamine.rawValue,
- eventQuery: .init(for: Date()), storeManager: storeManager)
- case .grid:
- taskViewController = OCKGridTaskViewController(taskID: OCKStore.Tasks.doxylamine.rawValue,
- eventQuery: .init(for: Date()), storeManager: storeManager)
- case .labeledValue, .numericProgress:
- taskViewController = nil
- }
-
- taskViewController.map { listViewController.appendViewController($0, animated: false) }
- return listViewController
- }
-
- func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
-}
-
-private extension LabeledValueTaskViewState {
-
- static func fromViewModel(state: LabeledValueTaskViewModel.State?) -> Self {
- guard let state = state else {
- return .incomplete(Text(""))
- }
-
- switch state {
- case let .complete(value, label):
- return .complete(Text(value), label.map(Text.init))
- case let .incomplete(label):
- return .incomplete(Text(label))
- }
- }
-}
diff --git a/OCKCatalog/OCKCatalogTests/Info.plist b/OCKCatalog/OCKCatalogTests/Info.plist
deleted file mode 100644
index 64d65ca49..000000000
--- a/OCKCatalog/OCKCatalogTests/Info.plist
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.0
- CFBundleVersion
- 1
-
-
diff --git a/OCKCatalog/OCKCatalogTests/OCKCatalogTests.swift b/OCKCatalog/OCKCatalogTests/OCKCatalogTests.swift
deleted file mode 100644
index f71cc0006..000000000
--- a/OCKCatalog/OCKCatalogTests/OCKCatalogTests.swift
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-import XCTest
-
-class OCKCatalogTests: XCTestCase {
-
- func testCatalog() {
-
- }
-}
diff --git a/OCKCatalog/OCKCatalogUITests/Info.plist b/OCKCatalog/OCKCatalogUITests/Info.plist
deleted file mode 100644
index 64d65ca49..000000000
--- a/OCKCatalog/OCKCatalogUITests/Info.plist
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.0
- CFBundleVersion
- 1
-
-
diff --git a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogGridTaskScreen.swift b/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogGridTaskScreen.swift
deleted file mode 100644
index c5c2de6de..000000000
--- a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogGridTaskScreen.swift
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-import XCTest
-
-class OCKCatalogGridTaskScreen: OCKCatalogTaskCardScreen {
-
-}
diff --git a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogHomeScreen.swift b/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogHomeScreen.swift
deleted file mode 100644
index 343e11eab..000000000
--- a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogHomeScreen.swift
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-import XCTest
-
-class OCKCatalogHomeScreen: OCKCatalogScreen {
- lazy var headerText = app.navigationBars.staticTexts["CareKit Catalog"]
- lazy var taskTable = app.tables.element
- lazy var taskItems = app.tables.cells.children(matching: .staticText).allElementsBoundByIndex
-
- func tapTaskByName(taskName: String) {
- taskTable.staticTexts[taskName].tap()
- }
-}
diff --git a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogScreen.swift b/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogScreen.swift
deleted file mode 100644
index b717c8fc3..000000000
--- a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogScreen.swift
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-import XCTest
-
-class OCKCatalogScreen {
- var app: XCUIApplication
- lazy var scrollView = app.scrollViews.element
-
- required init(_ app: XCUIApplication) {
- self.app = app
- }
-}
diff --git a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogTaskCardScreen.swift b/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogTaskCardScreen.swift
deleted file mode 100644
index f1be91993..000000000
--- a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogTaskCardScreen.swift
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-
-class OCKCatalogTaskCardScreen: OCKCatalogTaskScreen {
- lazy var cardTitle = app.scrollViews.otherElements.buttons.firstMatch // I don't care for being this imprecise, but without
- // accessibility identifiers, these are hard to pick out.
-}
diff --git a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogTaskListScreen.swift b/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogTaskListScreen.swift
deleted file mode 100644
index 2f0ce248b..000000000
--- a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogTaskListScreen.swift
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-import XCTest
-
-class OCKCatalogTaskListScreen: OCKCatalogTaskScreen {
-
-}
diff --git a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogTaskScreen.swift b/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogTaskScreen.swift
deleted file mode 100644
index d50f04b18..000000000
--- a/OCKCatalog/OCKCatalogUITests/Screens/OCKCatalogTaskScreen.swift
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-import XCTest
-
-class OCKCatalogTaskScreen: OCKCatalogScreen {
-
- let buttonLabelPredicate = NSPredicate(format: "label CONTAINS[cd] 'CareKit Catalog' || label CONTAINS[cd] 'Done'")
- lazy var dismissButton = app.navigationBars.buttons.element(matching: buttonLabelPredicate)
-
- func dismissScreen() {
- dismissButton.tap()
- }
-}
diff --git a/OCKCatalog/OCKCatalogUITests/TestUtils/UIUtilities.swift b/OCKCatalog/OCKCatalogUITests/TestUtils/UIUtilities.swift
deleted file mode 100644
index 454d6e182..000000000
--- a/OCKCatalog/OCKCatalogUITests/TestUtils/UIUtilities.swift
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-import XCTest
-
-// Extend XCUIElement to allow for scrolling to the specified element (when it is offscreen)
-extension XCUIElement {
-
- func scrollToElement(element: XCUIElement) {
- while element.isHittable == false {
- //swipeUp()
- XCUIApplication().swipeUp() // Including XCUIApplication() as a workaround here since it appears that
- // swipeUp() now infers and operates on the XCUIElement by default, which is problematic
- }
- }
-}
diff --git a/OCKCatalog/OCKCatalogUITests/Tests/UITestCatalogHomePage.swift b/OCKCatalog/OCKCatalogUITests/Tests/UITestCatalogHomePage.swift
deleted file mode 100644
index f53e53823..000000000
--- a/OCKCatalog/OCKCatalogUITests/Tests/UITestCatalogHomePage.swift
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import XCTest
-
-class UITestCatalogHomePage: XCTestCase {
-
- let app = XCUIApplication()
-
- override func setUp() {
- super.setUp()
- continueAfterFailure = false
- app.launchArguments = ["test"]
- app.launch()
- }
-
- func testHomePageDisplaysCorrectly() {
- let catalogHomeScreen = OCKCatalogHomeScreen(app)
-
- // Verify the presence (on-screen) of the "CareKit Catalog" header
- XCTAssert(catalogHomeScreen.headerText.isHittable, "Can't find the header text")
-
- // Verify the presence (on-screen) of the task list table
- XCTAssert(catalogHomeScreen.taskTable.isHittable, "Can't find the task table")
-
- // Verify the expected number of tasks in the list upon launch
- // Task items only appear in cells, so we can count the number of cells as opposed to staticTexts
- // (which would include the section header text elements)
- let expectedTasksCount = 16
- XCTAssertEqual(catalogHomeScreen.taskTable.cells.count, expectedTasksCount)
-
- }
-
- // Navigate into every task in the catalog task list, then back to the home screen
- func testNavigateToAllTasks() {
- let catalogHomeScreen = OCKCatalogHomeScreen(app)
- let taskScreen = OCKCatalogTaskScreen(app)
-
- // Iterate over every task in the list view, tap the task, then return to the list
- let tasks = catalogHomeScreen.taskItems
- for task in tasks {
- task.tap()
- taskScreen.dismissScreen()
- }
-
- }
-}
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json
deleted file mode 100644
index aefef2914..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : "<=145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">161"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">183"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Contents.json
deleted file mode 100644
index 1571c7e53..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Contents.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "assets" : [
- {
- "idiom" : "watch",
- "filename" : "Circular.imageset",
- "role" : "circular"
- },
- {
- "idiom" : "watch",
- "filename" : "Extra Large.imageset",
- "role" : "extra-large"
- },
- {
- "idiom" : "watch",
- "filename" : "Graphic Bezel.imageset",
- "role" : "graphic-bezel"
- },
- {
- "idiom" : "watch",
- "filename" : "Graphic Circular.imageset",
- "role" : "graphic-circular"
- },
- {
- "idiom" : "watch",
- "filename" : "Graphic Corner.imageset",
- "role" : "graphic-corner"
- },
- {
- "idiom" : "watch",
- "filename" : "Graphic Large Rectangular.imageset",
- "role" : "graphic-large-rectangular"
- },
- {
- "idiom" : "watch",
- "filename" : "Modular.imageset",
- "role" : "modular"
- },
- {
- "idiom" : "watch",
- "filename" : "Utilitarian.imageset",
- "role" : "utilitarian"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json
deleted file mode 100644
index aefef2914..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : "<=145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">161"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">183"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json
deleted file mode 100644
index aefef2914..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : "<=145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">161"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">183"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json
deleted file mode 100644
index aefef2914..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : "<=145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">161"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">183"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json
deleted file mode 100644
index aefef2914..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : "<=145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">161"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">183"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json
deleted file mode 100644
index aefef2914..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : "<=145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">161"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">183"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json
deleted file mode 100644
index aefef2914..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : "<=145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">161"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">183"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json
deleted file mode 100644
index aefef2914..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : "<=145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">161"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">145"
- },
- {
- "idiom" : "watch",
- "scale" : "2x",
- "screen-width" : ">183"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Contents.json
deleted file mode 100644
index da4a164c9..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Environment+StoreManager.swift b/OCKCatalog/OCKWatchCatalog Extension/Environment+StoreManager.swift
deleted file mode 100644
index af546cc26..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Environment+StoreManager.swift
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import Foundation
-import SwiftUI
-
-private struct StoreManagerEnvironmentKey: EnvironmentKey {
-
- static var defaultValue: OCKSynchronizedStoreManager {
- let extensionDelegate = WKExtension.shared().delegate as! ExtensionDelegate
- return extensionDelegate.storeManager
- }
-}
-
-public extension EnvironmentValues {
-
- var storeManager: OCKSynchronizedStoreManager {
- get { self[StoreManagerEnvironmentKey.self] }
- set { self[StoreManagerEnvironmentKey.self] = newValue }
- }
-}
diff --git a/OCKCatalog/OCKWatchCatalog Extension/ExtensionDelegate.swift b/OCKCatalog/OCKWatchCatalog Extension/ExtensionDelegate.swift
deleted file mode 100644
index 234d02f72..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/ExtensionDelegate.swift
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import CareKitStore
-import WatchConnectivity
-import WatchKit
-
-class ExtensionDelegate: NSObject, WKExtensionDelegate {
-
- private lazy var peer = OCKWatchConnectivityPeer()
- private lazy var store = OCKStore(name: "catalog-store", type: .inMemory, remote: peer)
- private(set) lazy var storeManager = OCKSynchronizedStoreManager(wrapping: store)
-
- private lazy var sessionManager: SessionManager = {
- let delegate = SessionManager()
- delegate.peer = peer
- delegate.store = store
- return delegate
- }()
-
- func applicationDidFinishLaunching() {
- peer.automaticallySynchronizes = true
-
- WCSession.default.delegate = sessionManager
- WCSession.default.activate()
- }
-
- func applicationDidBecomeActive() {
- store.synchronize { error in
- print(error?.localizedDescription ?? "Successful sync!")
- }
- }
-}
-
-class SessionManager: NSObject, WCSessionDelegate {
-
- fileprivate(set) var peer: OCKWatchConnectivityPeer!
- fileprivate(set) var store: OCKStore!
-
- func session(
- _ session: WCSession,
- activationDidCompleteWith activationState: WCSessionActivationState,
- error: Error?) {
-
- print("New session state: \(activationState)")
- }
-
- func session(
- _ session: WCSession,
- didReceiveMessage message: [String: Any],
- replyHandler: @escaping ([String: Any]) -> Void) {
-
- print("Received message from peer!")
-
- peer.reply(to: message, store: store) { reply in
- replyHandler(reply)
- }
- }
-}
diff --git a/OCKCatalog/OCKWatchCatalog Extension/HostingController.swift b/OCKCatalog/OCKWatchCatalog Extension/HostingController.swift
deleted file mode 100644
index b5b626f4d..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/HostingController.swift
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- Copyright (c) 2020, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-import CareKit
-import SwiftUI
-import WatchKit
-
-class HostingController: WKHostingController {
- override var body: ContentView {
- ContentView()
- }
-}
-
-struct ContentView: View {
-
- @Environment(\.storeManager) private var storeManager
-
- @ViewBuilder var body: some View {
- if #available(watchOS 7, *) {
- VStack(spacing: 16) {
- SimpleTaskView(taskID: "doxylamine", eventQuery: .init(for: Date()), storeManager: storeManager)
- InstructionsTaskView(taskID: "doxylamine", eventQuery: .init(for: Date()), storeManager: storeManager)
- }
- }
- }
-}
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Info.plist b/OCKCatalog/OCKWatchCatalog Extension/Info.plist
deleted file mode 100644
index df97129a5..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Info.plist
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleDisplayName
- OCKWatchCatalog Extension
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.0
- CFBundleVersion
- 1
- NSExtension
-
- NSExtensionAttributes
-
- WKAppBundleIdentifier
- com.example.carekit-samplecode.OCKCatalog.watchkitapp
-
- NSExtensionPointIdentifier
- com.apple.watchkit
-
- WKExtensionDelegateClassName
- $(PRODUCT_MODULE_NAME).ExtensionDelegate
-
-
diff --git a/OCKCatalog/OCKWatchCatalog Extension/Preview Content/Preview Assets.xcassets/Contents.json b/OCKCatalog/OCKWatchCatalog Extension/Preview Content/Preview Assets.xcassets/Contents.json
deleted file mode 100644
index da4a164c9..000000000
--- a/OCKCatalog/OCKWatchCatalog Extension/Preview Content/Preview Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog/Assets.xcassets/AppIcon.appiconset/Contents.json b/OCKCatalog/OCKWatchCatalog/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 6c0f2b420..000000000
--- a/OCKCatalog/OCKWatchCatalog/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- "images" : [
- {
- "size" : "24x24",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "notificationCenter",
- "subtype" : "38mm"
- },
- {
- "size" : "27.5x27.5",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "notificationCenter",
- "subtype" : "42mm"
- },
- {
- "size" : "29x29",
- "idiom" : "watch",
- "role" : "companionSettings",
- "scale" : "2x"
- },
- {
- "size" : "29x29",
- "idiom" : "watch",
- "role" : "companionSettings",
- "scale" : "3x"
- },
- {
- "size" : "40x40",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "appLauncher",
- "subtype" : "38mm"
- },
- {
- "size" : "44x44",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "appLauncher",
- "subtype" : "40mm"
- },
- {
- "size" : "50x50",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "appLauncher",
- "subtype" : "44mm"
- },
- {
- "size" : "86x86",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "quickLook",
- "subtype" : "38mm"
- },
- {
- "size" : "98x98",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "quickLook",
- "subtype" : "42mm"
- },
- {
- "size" : "108x108",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "quickLook",
- "subtype" : "44mm"
- },
- {
- "idiom" : "watch-marketing",
- "size" : "1024x1024",
- "scale" : "1x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog/Assets.xcassets/Contents.json b/OCKCatalog/OCKWatchCatalog/Assets.xcassets/Contents.json
deleted file mode 100644
index da4a164c9..000000000
--- a/OCKCatalog/OCKWatchCatalog/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKCatalog/OCKWatchCatalog/Base.lproj/Interface.storyboard b/OCKCatalog/OCKWatchCatalog/Base.lproj/Interface.storyboard
deleted file mode 100644
index 9704efd25..000000000
--- a/OCKCatalog/OCKWatchCatalog/Base.lproj/Interface.storyboard
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/OCKCatalog/OCKWatchCatalog/Info.plist b/OCKCatalog/OCKWatchCatalog/Info.plist
deleted file mode 100644
index 914310006..000000000
--- a/OCKCatalog/OCKWatchCatalog/Info.plist
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleDisplayName
- OCKCatalog
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.0
- CFBundleVersion
- 1
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
-
- WKCompanionAppBundleIdentifier
- com.example.carekit-samplecode.OCKCatalog
- WKWatchKitApp
-
-
-
diff --git a/OCKSample/OCKSample.xcodeproj/project.pbxproj b/OCKSample/OCKSample.xcodeproj/project.pbxproj
deleted file mode 100644
index 5fff79188..000000000
--- a/OCKSample/OCKSample.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,578 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 50;
- objects = {
-
-/* Begin PBXBuildFile section */
- 03F0600A2331946600CCE09B /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F060092331946600CCE09B /* SceneDelegate.swift */; };
- 51431F9B23D166AE006A7CFD /* CareKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51431F9823D166AE006A7CFD /* CareKit.framework */; };
- 51431F9C23D166AE006A7CFD /* CareKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 51431F9823D166AE006A7CFD /* CareKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- 51431F9D23D166AE006A7CFD /* CareKitStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51431F9923D166AE006A7CFD /* CareKitStore.framework */; };
- 51431F9E23D166AE006A7CFD /* CareKitStore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 51431F9923D166AE006A7CFD /* CareKitStore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- 51431F9F23D166AE006A7CFD /* CareKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51431F9A23D166AE006A7CFD /* CareKitUI.framework */; };
- 51431FA023D166AE006A7CFD /* CareKitUI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 51431F9A23D166AE006A7CFD /* CareKitUI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- 5173CB8A23C3A846007655A0 /* OCKSampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5173CB8923C3A846007655A0 /* OCKSampleUITests.swift */; };
- E72B2C0A226939E3009A9438 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E72B2C09226939E3009A9438 /* AppDelegate.swift */; };
- E72B2C14226939E4009A9438 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E72B2C12226939E4009A9438 /* LaunchScreen.storyboard */; };
- E7440E4F229477F7007AD30A /* CareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7440E4E229477F7007AD30A /* CareViewController.swift */; };
- E7C37849228F887800E982D8 /* TipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7C37848228F887800E982D8 /* TipView.swift */; };
- E7C4CA0B22809AD500ECC3D7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E7C4CA0A22809AD500ECC3D7 /* Assets.xcassets */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 5173CB8C23C3A846007655A0 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = E72B2BFE226939E3009A9438 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = E72B2C05226939E3009A9438;
- remoteInfo = OCKSample;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
- 51431FA223D166AE006A7CFD /* Embed Frameworks */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 10;
- files = (
- 51431F9E23D166AE006A7CFD /* CareKitStore.framework in Embed Frameworks */,
- 51431F9C23D166AE006A7CFD /* CareKit.framework in Embed Frameworks */,
- 51431FA023D166AE006A7CFD /* CareKitUI.framework in Embed Frameworks */,
- );
- name = "Embed Frameworks";
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
- 03580E3E23CFA2E400A57818 /* OCKSample.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OCKSample.entitlements; sourceTree = ""; };
- 03F060092331946600CCE09B /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; };
- 0520468223C3C1F2004F0F36 /* OCKSample.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = OCKSample.xctestplan; sourceTree = ""; };
- 51431F9823D166AE006A7CFD /* CareKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CareKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 51431F9923D166AE006A7CFD /* CareKitStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CareKitStore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 51431F9A23D166AE006A7CFD /* CareKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CareKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 5173CB8723C3A846007655A0 /* OCKSampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OCKSampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 5173CB8923C3A846007655A0 /* OCKSampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OCKSampleUITests.swift; sourceTree = ""; };
- 5173CB8B23C3A846007655A0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 51F6343923D2877B00FE576E /* HealthKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HealthKit.framework; path = System/Library/Frameworks/HealthKit.framework; sourceTree = SDKROOT; };
- E72B2C06226939E3009A9438 /* OCKSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OCKSample.app; sourceTree = BUILT_PRODUCTS_DIR; };
- E72B2C09226939E3009A9438 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
- E72B2C13226939E4009A9438 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
- E72B2C15226939E4009A9438 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- E7440E4E229477F7007AD30A /* CareViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CareViewController.swift; sourceTree = ""; };
- E7C37848228F887800E982D8 /* TipView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TipView.swift; sourceTree = ""; };
- E7C4CA0A22809AD500ECC3D7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 51431FA123D166AE006A7CFD /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 51431F9D23D166AE006A7CFD /* CareKitStore.framework in Frameworks */,
- 51431F9B23D166AE006A7CFD /* CareKit.framework in Frameworks */,
- 51431F9F23D166AE006A7CFD /* CareKitUI.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 51431F9723D166AE006A7CFD /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 51F6343923D2877B00FE576E /* HealthKit.framework */,
- 51431F9823D166AE006A7CFD /* CareKit.framework */,
- 51431F9923D166AE006A7CFD /* CareKitStore.framework */,
- 51431F9A23D166AE006A7CFD /* CareKitUI.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- 5173CB8823C3A846007655A0 /* OCKSampleUITests */ = {
- isa = PBXGroup;
- children = (
- 5173CB8923C3A846007655A0 /* OCKSampleUITests.swift */,
- 5173CB8B23C3A846007655A0 /* Info.plist */,
- );
- path = OCKSampleUITests;
- sourceTree = "";
- };
- 71A79C8A2294FBA1002B96D3 /* Supporting Files */ = {
- isa = PBXGroup;
- children = (
- E7C4CA0A22809AD500ECC3D7 /* Assets.xcassets */,
- E72B2C12226939E4009A9438 /* LaunchScreen.storyboard */,
- E72B2C15226939E4009A9438 /* Info.plist */,
- );
- path = "Supporting Files";
- sourceTree = "";
- };
- E72B2BFD226939E3009A9438 = {
- isa = PBXGroup;
- children = (
- 0520468223C3C1F2004F0F36 /* OCKSample.xctestplan */,
- E72B2C08226939E3009A9438 /* OCKSample */,
- 5173CB8823C3A846007655A0 /* OCKSampleUITests */,
- E72B2C07226939E3009A9438 /* Products */,
- 51431F9723D166AE006A7CFD /* Frameworks */,
- );
- sourceTree = "";
- };
- E72B2C07226939E3009A9438 /* Products */ = {
- isa = PBXGroup;
- children = (
- E72B2C06226939E3009A9438 /* OCKSample.app */,
- 5173CB8723C3A846007655A0 /* OCKSampleUITests.xctest */,
- );
- name = Products;
- sourceTree = "";
- };
- E72B2C08226939E3009A9438 /* OCKSample */ = {
- isa = PBXGroup;
- children = (
- 03580E3E23CFA2E400A57818 /* OCKSample.entitlements */,
- E72B2C09226939E3009A9438 /* AppDelegate.swift */,
- 03F060092331946600CCE09B /* SceneDelegate.swift */,
- E7440E4E229477F7007AD30A /* CareViewController.swift */,
- E7C37848228F887800E982D8 /* TipView.swift */,
- 71A79C8A2294FBA1002B96D3 /* Supporting Files */,
- );
- path = OCKSample;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 5173CB8623C3A846007655A0 /* OCKSampleUITests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 5173CB9723C3A846007655A0 /* Build configuration list for PBXNativeTarget "OCKSampleUITests" */;
- buildPhases = (
- 5173CB8323C3A846007655A0 /* Sources */,
- 5173CB8523C3A846007655A0 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 5173CB8D23C3A846007655A0 /* PBXTargetDependency */,
- );
- name = OCKSampleUITests;
- productName = OCKSampleUITests;
- productReference = 5173CB8723C3A846007655A0 /* OCKSampleUITests.xctest */;
- productType = "com.apple.product-type.bundle.ui-testing";
- };
- E72B2C05226939E3009A9438 /* OCKSample */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = E72B2C18226939E4009A9438 /* Build configuration list for PBXNativeTarget "OCKSample" */;
- buildPhases = (
- E72B2C02226939E3009A9438 /* Sources */,
- E72B2C04226939E3009A9438 /* Resources */,
- 51431FA123D166AE006A7CFD /* Frameworks */,
- 51431FA223D166AE006A7CFD /* Embed Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = OCKSample;
- packageProductDependencies = (
- );
- productName = CareKitDemoApp;
- productReference = E72B2C06226939E3009A9438 /* OCKSample.app */;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- E72B2BFE226939E3009A9438 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 1110;
- LastUpgradeCheck = 1200;
- ORGANIZATIONNAME = Apple;
- TargetAttributes = {
- 5173CB8623C3A846007655A0 = {
- CreatedOnToolsVersion = 11.1;
- TestTargetID = E72B2C05226939E3009A9438;
- };
- E72B2C05226939E3009A9438 = {
- CreatedOnToolsVersion = 10.2;
- };
- };
- };
- buildConfigurationList = E72B2C01226939E3009A9438 /* Build configuration list for PBXProject "OCKSample" */;
- compatibilityVersion = "Xcode 9.3";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = E72B2BFD226939E3009A9438;
- productRefGroup = E72B2C07226939E3009A9438 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- E72B2C05226939E3009A9438 /* OCKSample */,
- 5173CB8623C3A846007655A0 /* OCKSampleUITests */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 5173CB8523C3A846007655A0 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- E72B2C04226939E3009A9438 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- E7C4CA0B22809AD500ECC3D7 /* Assets.xcassets in Resources */,
- E72B2C14226939E4009A9438 /* LaunchScreen.storyboard in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 5173CB8323C3A846007655A0 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 5173CB8A23C3A846007655A0 /* OCKSampleUITests.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- E72B2C02226939E3009A9438 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- E7440E4F229477F7007AD30A /* CareViewController.swift in Sources */,
- E72B2C0A226939E3009A9438 /* AppDelegate.swift in Sources */,
- E7C37849228F887800E982D8 /* TipView.swift in Sources */,
- 03F0600A2331946600CCE09B /* SceneDelegate.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 5173CB8D23C3A846007655A0 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = E72B2C05226939E3009A9438 /* OCKSample */;
- targetProxy = 5173CB8C23C3A846007655A0 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- E72B2C12226939E4009A9438 /* LaunchScreen.storyboard */ = {
- isa = PBXVariantGroup;
- children = (
- E72B2C13226939E4009A9438 /* Base */,
- );
- name = LaunchScreen.storyboard;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 052F8B2F235778A200E45940 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
- MTL_ENABLE_DEBUG_INFO = NO;
- MTL_FAST_MATH = YES;
- SDKROOT = iphoneos;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
- SWIFT_TREAT_WARNINGS_AS_ERRORS = YES;
- SWIFT_VERSION = 5.0;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- 052F8B30235778A200E45940 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CODE_SIGN_ENTITLEMENTS = OCKSample/OCKSample.entitlements;
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 13;
- DEVELOPMENT_TEAM = "";
- ENABLE_BITCODE = YES;
- GCC_TREAT_WARNINGS_AS_ERRORS = NO;
- INFOPLIST_FILE = "$(SRCROOT)/OCKSample/Supporting Files/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "com.example.carekit-samplecode.OCKSample";
- PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
- SWIFT_TREAT_WARNINGS_AS_ERRORS = NO;
- TARGETED_DEVICE_FAMILY = 1;
- };
- name = Release;
- };
- 5173CB8E23C3A846007655A0 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- CODE_SIGN_STYLE = Automatic;
- DEBUG_INFORMATION_FORMAT = dwarf;
- INFOPLIST_FILE = OCKSampleUITests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 13.1;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = Apple.OCKSampleUITests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_TARGET_NAME = OCKSample;
- };
- name = Debug;
- };
- 5173CB9023C3A846007655A0 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_STYLE = Automatic;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- INFOPLIST_FILE = OCKSampleUITests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 13.1;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MTL_ENABLE_DEBUG_INFO = NO;
- MTL_FAST_MATH = YES;
- PRODUCT_BUNDLE_IDENTIFIER = Apple.OCKSampleUITests;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SDKROOT = iphoneos;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- TEST_TARGET_NAME = OCKSample;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- E72B2C16226939E4009A9438 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
- MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
- MTL_FAST_MATH = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_TREAT_WARNINGS_AS_ERRORS = YES;
- SWIFT_VERSION = 5.0;
- };
- name = Debug;
- };
- E72B2C19226939E4009A9438 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CODE_SIGN_ENTITLEMENTS = OCKSample/OCKSample.entitlements;
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 13;
- DEVELOPMENT_TEAM = "";
- ENABLE_BITCODE = YES;
- GCC_TREAT_WARNINGS_AS_ERRORS = NO;
- INFOPLIST_FILE = "$(SRCROOT)/OCKSample/Supporting Files/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "com.example.carekit-samplecode.OCKSample";
- PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
- SWIFT_TREAT_WARNINGS_AS_ERRORS = NO;
- TARGETED_DEVICE_FAMILY = 1;
- };
- name = Debug;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 5173CB9723C3A846007655A0 /* Build configuration list for PBXNativeTarget "OCKSampleUITests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 5173CB8E23C3A846007655A0 /* Debug */,
- 5173CB9023C3A846007655A0 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Debug;
- };
- E72B2C01226939E3009A9438 /* Build configuration list for PBXProject "OCKSample" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- E72B2C16226939E4009A9438 /* Debug */,
- 052F8B2F235778A200E45940 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Debug;
- };
- E72B2C18226939E4009A9438 /* Build configuration list for PBXNativeTarget "OCKSample" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- E72B2C19226939E4009A9438 /* Debug */,
- 052F8B30235778A200E45940 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Debug;
- };
-/* End XCConfigurationList section */
- };
- rootObject = E72B2BFE226939E3009A9438 /* Project object */;
-}
diff --git a/OCKSample/OCKSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/OCKSample/OCKSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 919434a62..000000000
--- a/OCKSample/OCKSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/OCKSample/OCKSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/OCKSample/OCKSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d981003..000000000
--- a/OCKSample/OCKSample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/OCKSample/OCKSample.xcodeproj/xcshareddata/xcschemes/OCKSample.xcscheme b/OCKSample/OCKSample.xcodeproj/xcshareddata/xcschemes/OCKSample.xcscheme
deleted file mode 100644
index ed0cb6c9e..000000000
--- a/OCKSample/OCKSample.xcodeproj/xcshareddata/xcschemes/OCKSample.xcscheme
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/OCKSample/OCKSample.xctestplan b/OCKSample/OCKSample.xctestplan
deleted file mode 100644
index ec0a8d688..000000000
--- a/OCKSample/OCKSample.xctestplan
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "configurations" : [
- {
- "id" : "F6F1CE15-E14A-446C-B415-806E8BCD9D76",
- "name" : "Configuration 1",
- "options" : {
-
- }
- }
- ],
- "defaultOptions" : {
- "codeCoverage" : false,
- "targetForVariableExpansion" : {
- "containerPath" : "container:OCKSample.xcodeproj",
- "identifier" : "E72B2C05226939E3009A9438",
- "name" : "OCKSample"
- }
- },
- "testTargets" : [
- {
- "target" : {
- "containerPath" : "container:OCKSample.xcodeproj",
- "identifier" : "5173CB8623C3A846007655A0",
- "name" : "OCKSampleUITests"
- }
- }
- ],
- "version" : 1
-}
diff --git a/OCKSample/OCKSample/AppDelegate.swift b/OCKSample/OCKSample/AppDelegate.swift
deleted file mode 100644
index f0496c342..000000000
--- a/OCKSample/OCKSample/AppDelegate.swift
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
-Copyright (c) 2019, Apple Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation and/or
-other materials provided with the distribution.
-
-3. Neither the name of the copyright holder(s) nor the names of any contributors
-may be used to endorse or promote products derived from this software without
-specific prior written permission. No license is granted to the trademarks of
-the copyright holders even if such marks are included in this software.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import CareKitStore
-import Contacts
-import UIKit
-import HealthKit
-
-@UIApplicationMain
-class AppDelegate: UIResponder, UIApplicationDelegate {
-
- lazy private(set) var coreDataStore = OCKStore(name: "SampleAppStore", type: .inMemory)
-
- lazy private(set) var healthKitStore = OCKHealthKitPassthroughStore(store: coreDataStore)
-
- lazy private(set) var synchronizedStoreManager: OCKSynchronizedStoreManager = {
- let coordinator = OCKStoreCoordinator()
- coordinator.attach(eventStore: healthKitStore)
- coordinator.attach(store: coreDataStore)
- return OCKSynchronizedStoreManager(wrapping: coordinator)
- }()
-
- func application(_ application: UIApplication,
- didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
-
- coreDataStore.populateSampleData()
- healthKitStore.populateSampleData()
-
- return true
- }
-
- func application(_ application: UIApplication,
- configurationForConnecting connectingSceneSession: UISceneSession,
- options: UIScene.ConnectionOptions) -> UISceneConfiguration {
- return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
- }
-}
-
-private extension OCKStore {
-
- // Adds tasks and contacts into the store
- func populateSampleData() {
-
- let thisMorning = Calendar.current.startOfDay(for: Date())
- let aFewDaysAgo = Calendar.current.date(byAdding: .day, value: -4, to: thisMorning)!
- let beforeBreakfast = Calendar.current.date(byAdding: .hour, value: 8, to: aFewDaysAgo)!
- let afterLunch = Calendar.current.date(byAdding: .hour, value: 14, to: aFewDaysAgo)!
-
- let schedule = OCKSchedule(composing: [
- OCKScheduleElement(start: beforeBreakfast, end: nil,
- interval: DateComponents(day: 1)),
-
- OCKScheduleElement(start: afterLunch, end: nil,
- interval: DateComponents(day: 2))
- ])
-
- var doxylamine = OCKTask(id: "doxylamine", title: "Take Doxylamine",
- carePlanUUID: nil, schedule: schedule)
- doxylamine.instructions = "Take 25mg of doxylamine when you experience nausea."
- doxylamine.asset = "pills"
- let nauseaSchedule = OCKSchedule(composing: [
- OCKScheduleElement(start: beforeBreakfast, end: nil, interval: DateComponents(day: 1),
- text: "Anytime throughout the day", targetValues: [], duration: .allDay)
- ])
-
- var nausea = OCKTask(id: "nausea", title: "Track your nausea",
- carePlanUUID: nil, schedule: nauseaSchedule)
- nausea.impactsAdherence = false
- nausea.instructions = "Tap the button below anytime you experience nausea."
-
- let kegelElement = OCKScheduleElement(start: beforeBreakfast, end: nil, interval: DateComponents(day: 2))
- let kegelSchedule = OCKSchedule(composing: [kegelElement])
- var kegels = OCKTask(id: "kegels", title: "Kegel Exercises", carePlanUUID: nil, schedule: kegelSchedule)
- kegels.impactsAdherence = true
- kegels.instructions = "Perform kegel exercies"
-
- addTasks([nausea, doxylamine, kegels], callbackQueue: .main, completion: nil)
-
- var contact1 = OCKContact(id: "jane", givenName: "Jane",
- familyName: "Daniels", carePlanUUID: nil)
- contact1.asset = "JaneDaniels"
- contact1.title = "Family Practice Doctor"
- contact1.role = "Dr. Daniels is a family practice doctor with 8 years of experience."
- contact1.emailAddresses = [OCKLabeledValue(label: CNLabelEmailiCloud, value: "janedaniels@icloud.com")]
- contact1.phoneNumbers = [OCKLabeledValue(label: CNLabelWork, value: "(324) 555-7415")]
- contact1.messagingNumbers = [OCKLabeledValue(label: CNLabelWork, value: "(324) 555-7415")]
-
- contact1.address = {
- let address = OCKPostalAddress()
- address.street = "2598 Reposa Way"
- address.city = "San Francisco"
- address.state = "CA"
- address.postalCode = "94127"
- return address
- }()
-
- var contact2 = OCKContact(id: "matthew", givenName: "Matthew",
- familyName: "Reiff", carePlanUUID: nil)
- contact2.asset = "MatthewReiff"
- contact2.title = "OBGYN"
- contact2.role = "Dr. Reiff is an OBGYN with 13 years of experience."
- contact2.phoneNumbers = [OCKLabeledValue(label: CNLabelWork, value: "(324) 555-7415")]
- contact2.messagingNumbers = [OCKLabeledValue(label: CNLabelWork, value: "(324) 555-7415")]
- contact2.address = {
- let address = OCKPostalAddress()
- address.street = "396 El Verano Way"
- address.city = "San Francisco"
- address.state = "CA"
- address.postalCode = "94127"
- return address
- }()
-
- addContacts([contact1, contact2])
- }
-}
-
-extension OCKHealthKitPassthroughStore {
-
- func populateSampleData() {
-
- let schedule = OCKSchedule.dailyAtTime(
- hour: 8, minutes: 0, start: Date(), end: nil, text: nil,
- duration: .hours(12), targetValues: [OCKOutcomeValue(2000.0, units: "Steps")])
-
- let steps = OCKHealthKitTask(
- id: "steps",
- title: "Steps",
- carePlanUUID: nil,
- schedule: schedule,
- healthKitLinkage: OCKHealthKitLinkage(
- quantityIdentifier: .stepCount,
- quantityType: .cumulative,
- unit: .count()))
-
- addTasks([steps]) { result in
- switch result {
- case .success: print("Added tasks into HealthKitPassthroughStore!")
- case .failure(let error): print("Error: \(error)")
- }
- }
- }
-}
diff --git a/OCKSample/OCKSample/CareViewController.swift b/OCKSample/OCKSample/CareViewController.swift
deleted file mode 100644
index aed6c8d3f..000000000
--- a/OCKSample/OCKSample/CareViewController.swift
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- Copyright (c) 2019, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import Foundation
-import UIKit
-import CareKit
-import CareKitStore
-import SwiftUI
-
-class CareViewController: OCKDailyPageViewController {
-
- override func viewDidLoad() {
- super.viewDidLoad()
- navigationItem.rightBarButtonItem =
- UIBarButtonItem(title: "Care Team", style: .plain, target: self,
- action: #selector(presentContactsListViewController))
- }
-
- @objc private func presentContactsListViewController() {
- let viewController = OCKContactsListViewController(storeManager: storeManager)
- viewController.title = "Care Team"
- viewController.isModalInPresentation = true
- viewController.navigationItem.rightBarButtonItem =
- UIBarButtonItem(title: "Done", style: .plain, target: self,
- action: #selector(dismissContactsListViewController))
-
- let navigationController = UINavigationController(rootViewController: viewController)
- present(navigationController, animated: true, completion: nil)
- }
-
- @objc private func dismissContactsListViewController() {
- dismiss(animated: true, completion: nil)
- }
-
- // This will be called each time the selected date changes.
- // Use this as an opportunity to rebuild the content shown to the user.
- override func dailyPageViewController(_ dailyPageViewController: OCKDailyPageViewController,
- prepare listViewController: OCKListViewController, for date: Date) {
-
- let identifiers = ["doxylamine", "nausea", "kegels", "steps", "heartRate"]
- var query = OCKTaskQuery(for: date)
- query.ids = identifiers
- query.excludesTasksWithNoEvents = true
-
- storeManager.store.fetchAnyTasks(query: query, callbackQueue: .main) { result in
- switch result {
- case .failure(let error): print("Error: \(error)")
- case .success(let tasks):
-
- // Add a non-CareKit view into the list
- let tipTitle = "Benefits of exercising"
- let tipText = "Learn how activity can promote a healthy pregnancy."
-
- // Only show the tip view on the current date
- if Calendar.current.isDate(date, inSameDayAs: Date()) {
- let tipView = TipView()
- tipView.headerView.titleLabel.text = tipTitle
- tipView.headerView.detailLabel.text = tipText
- tipView.imageView.image = UIImage(named: "exercise.jpg")
- listViewController.appendView(tipView, animated: false)
- }
-
- if #available(iOS 14, *), let walkTask = tasks.first(where: { $0.id == "steps" }) {
-
- let view = NumericProgressTaskView(
- task: walkTask,
- eventQuery: OCKEventQuery(for: date),
- storeManager: self.storeManager)
- .padding([.vertical], 10)
-
- listViewController.appendViewController(view.formattedHostingController(), animated: false)
- }
-
- // Since the kegel task is only scheduled every other day, there will be cases
- // where it is not contained in the tasks array returned from the query.
- if let kegelsTask = tasks.first(where: { $0.id == "kegels" }) {
- let kegelsCard = OCKSimpleTaskViewController(task: kegelsTask, eventQuery: .init(for: date),
- storeManager: self.storeManager)
- listViewController.appendViewController(kegelsCard, animated: false)
- }
-
- // Create a card for the doxylamine task if there are events for it on this day.
- if let doxylamineTask = tasks.first(where: { $0.id == "doxylamine" }) {
-
- let doxylamineCard = OCKChecklistTaskViewController(
- task: doxylamineTask,
- eventQuery: .init(for: date),
- storeManager: self.storeManager)
-
- listViewController.appendViewController(doxylamineCard, animated: false)
- }
-
- // Create a card for the nausea task if there are events for it on this day.
- // Its OCKSchedule was defined to have daily events, so this task should be
- // found in `tasks` every day after the task start date.
- if let nauseaTask = tasks.first(where: { $0.id == "nausea" }) {
-
- // dynamic gradient colors
- let nauseaGradientStart = UIColor { traitCollection -> UIColor in
- return traitCollection.userInterfaceStyle == .light ? #colorLiteral(red: 0.9960784314, green: 0.3725490196, blue: 0.368627451, alpha: 1) : #colorLiteral(red: 0.8627432641, green: 0.2630574384, blue: 0.2592858295, alpha: 1)
- }
- let nauseaGradientEnd = UIColor { traitCollection -> UIColor in
- return traitCollection.userInterfaceStyle == .light ? #colorLiteral(red: 0.9960784314, green: 0.4732026144, blue: 0.368627451, alpha: 1) : #colorLiteral(red: 0.8627432641, green: 0.3598620686, blue: 0.2592858295, alpha: 1)
- }
-
- // Create a plot comparing nausea to medication adherence.
- let nauseaDataSeries = OCKDataSeriesConfiguration(
- taskID: "nausea",
- legendTitle: "Nausea",
- gradientStartColor: nauseaGradientStart,
- gradientEndColor: nauseaGradientEnd,
- markerSize: 10,
- eventAggregator: OCKEventAggregator.countOutcomeValues)
-
- let doxylamineDataSeries = OCKDataSeriesConfiguration(
- taskID: "doxylamine",
- legendTitle: "Doxylamine",
- gradientStartColor: .systemGray2,
- gradientEndColor: .systemGray,
- markerSize: 10,
- eventAggregator: OCKEventAggregator.countOutcomeValues)
-
- let insightsCard = OCKCartesianChartViewController(
- plotType: .bar,
- selectedDate: date,
- configurations: [nauseaDataSeries, doxylamineDataSeries],
- storeManager: self.storeManager)
-
- insightsCard.chartView.headerView.titleLabel.text = "Nausea & Doxylamine Intake"
- insightsCard.chartView.headerView.detailLabel.text = "This Week"
- insightsCard.chartView.headerView.accessibilityLabel = "Nausea & Doxylamine Intake, This Week"
- listViewController.appendViewController(insightsCard, animated: false)
-
- // Also create a card that displays a single event.
- // The event query passed into the initializer specifies that only
- // today's log entries should be displayed by this log task view controller.
- let nauseaCard = OCKButtonLogTaskViewController(task: nauseaTask, eventQuery: .init(for: date),
- storeManager: self.storeManager)
- listViewController.appendViewController(nauseaCard, animated: false)
- }
- }
- }
- }
-}
-
-private extension View {
- func formattedHostingController() -> UIHostingController {
- let viewController = UIHostingController(rootView: self)
- viewController.view.backgroundColor = .clear
- return viewController
- }
-}
diff --git a/OCKSample/OCKSample/OCKSample.entitlements b/OCKSample/OCKSample/OCKSample.entitlements
deleted file mode 100644
index 91f32c2b2..000000000
--- a/OCKSample/OCKSample/OCKSample.entitlements
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- com.apple.developer.healthkit
-
- com.apple.developer.healthkit.access
-
- health-records
-
- com.apple.security.app-sandbox
-
- com.apple.security.network.client
-
-
-
diff --git a/OCKSample/OCKSample/SceneDelegate.swift b/OCKSample/OCKSample/SceneDelegate.swift
deleted file mode 100644
index 537dbe0ef..000000000
--- a/OCKSample/OCKSample/SceneDelegate.swift
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- Copyright (c) 2019, Apple Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
- 3. Neither the name of the copyright holder(s) nor the names of any contributors
- may be used to endorse or promote products derived from this software without
- specific prior written permission. No license is granted to the trademarks of
- the copyright holders even if such marks are included in this software.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import CareKit
-import UIKit
-
-class SceneDelegate: UIResponder, UIWindowSceneDelegate {
-
- var window: UIWindow?
-
- func scene(_ scene: UIScene,
- willConnectTo session: UISceneSession,
- options connectionOptions: UIScene.ConnectionOptions) {
-
- let appDelegate = UIApplication.shared.delegate as! AppDelegate
- let manager = appDelegate.synchronizedStoreManager
- let careViewController = UINavigationController(rootViewController: CareViewController(storeManager: manager))
-
- let permissionViewController = UIViewController()
- permissionViewController.view.backgroundColor = .white
- if let windowScene = scene as? UIWindowScene {
- window = UIWindow(windowScene: windowScene)
- window?.rootViewController = permissionViewController
- window?.tintColor = UIColor { $0.userInterfaceStyle == .light ? #colorLiteral(red: 0.9960784314, green: 0.3725490196, blue: 0.368627451, alpha: 1) : #colorLiteral(red: 0.8627432641, green: 0.2630574384, blue: 0.2592858295, alpha: 1) }
- window?.makeKeyAndVisible()
-
- DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
- appDelegate.healthKitStore.requestHealthKitPermissionsForAllTasksInStore { _ in
- DispatchQueue.main.async {
- self.window?.rootViewController = careViewController
- }
- }
- }
- }
- }
-}
diff --git a/OCKSample/OCKSample/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json b/OCKSample/OCKSample/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index e04566584..000000000
--- a/OCKSample/OCKSample/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,196 +0,0 @@
-{
- "images" : [
- {
- "size" : "20x20",
- "idiom" : "iphone",
- "filename" : "Icon-App-20x20@2x-1.png",
- "scale" : "2x"
- },
- {
- "size" : "20x20",
- "idiom" : "iphone",
- "filename" : "Icon-App-20x20@3x.png",
- "scale" : "3x"
- },
- {
- "size" : "29x29",
- "idiom" : "iphone",
- "filename" : "Icon-App-29x29@2x-2.png",
- "scale" : "2x"
- },
- {
- "size" : "29x29",
- "idiom" : "iphone",
- "filename" : "Icon-Homescreen-29x29@3x.png",
- "scale" : "3x"
- },
- {
- "size" : "40x40",
- "idiom" : "iphone",
- "filename" : "Icon-App-40x40@2x-2.png",
- "scale" : "2x"
- },
- {
- "size" : "40x40",
- "idiom" : "iphone",
- "filename" : "Icon-App-40x40@3x.png",
- "scale" : "3x"
- },
- {
- "size" : "60x60",
- "idiom" : "iphone",
- "filename" : "Icon-App-60x60@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "60x60",
- "idiom" : "iphone",
- "filename" : "Icon-App-60x60@3x.png",
- "scale" : "3x"
- },
- {
- "size" : "20x20",
- "idiom" : "ipad",
- "filename" : "Icon-App-20x20@1x.png",
- "scale" : "1x"
- },
- {
- "size" : "20x20",
- "idiom" : "ipad",
- "filename" : "Icon-App-20x20@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "29x29",
- "idiom" : "ipad",
- "filename" : "Icon-App-29x29@1x.png",
- "scale" : "1x"
- },
- {
- "size" : "29x29",
- "idiom" : "ipad",
- "filename" : "Icon-App-29x29@2x-1.png",
- "scale" : "2x"
- },
- {
- "size" : "40x40",
- "idiom" : "ipad",
- "filename" : "Icon-App-40x40@1x.png",
- "scale" : "1x"
- },
- {
- "size" : "40x40",
- "idiom" : "ipad",
- "filename" : "Icon-App-40x40@2x-1.png",
- "scale" : "2x"
- },
- {
- "size" : "76x76",
- "idiom" : "ipad",
- "filename" : "Icon-App-76x76@1x.png",
- "scale" : "1x"
- },
- {
- "size" : "76x76",
- "idiom" : "ipad",
- "filename" : "Icon-App-76x76@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "83.5x83.5",
- "idiom" : "ipad",
- "filename" : "Icon-App-83.5x83.5@2x.png",
- "scale" : "2x"
- },
- {
- "size" : "1024x1024",
- "idiom" : "ios-marketing",
- "filename" : "Icon-App-1024x1024@1x.png",
- "scale" : "1x"
- },
- {
- "size" : "24x24",
- "idiom" : "watch",
- "filename" : "Icon-Homescreen-24x24@2x.png",
- "scale" : "2x",
- "role" : "notificationCenter",
- "subtype" : "38mm"
- },
- {
- "size" : "27.5x27.5",
- "idiom" : "watch",
- "filename" : "Icon-Homescreen-27.5x27.5@2x.png",
- "scale" : "2x",
- "role" : "notificationCenter",
- "subtype" : "42mm"
- },
- {
- "size" : "29x29",
- "idiom" : "watch",
- "filename" : "Icon-Homescreen-29x29@2x.png",
- "role" : "companionSettings",
- "scale" : "2x"
- },
- {
- "size" : "29x29",
- "idiom" : "watch",
- "filename" : "Icon-Homescreen-29x29@3x-1.png",
- "role" : "companionSettings",
- "scale" : "3x"
- },
- {
- "size" : "40x40",
- "idiom" : "watch",
- "filename" : "Icon-Homescreen-40x40@2x.png",
- "scale" : "2x",
- "role" : "appLauncher",
- "subtype" : "38mm"
- },
- {
- "size" : "44x44",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "appLauncher",
- "subtype" : "40mm"
- },
- {
- "size" : "50x50",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "appLauncher",
- "subtype" : "44mm"
- },
- {
- "size" : "86x86",
- "idiom" : "watch",
- "filename" : "Icon-Homescreen-86x86@2x.png",
- "scale" : "2x",
- "role" : "quickLook",
- "subtype" : "38mm"
- },
- {
- "size" : "98x98",
- "idiom" : "watch",
- "filename" : "Icon-Homescreen-98x98@2x.png",
- "scale" : "2x",
- "role" : "quickLook",
- "subtype" : "42mm"
- },
- {
- "size" : "108x108",
- "idiom" : "watch",
- "scale" : "2x",
- "role" : "quickLook",
- "subtype" : "44mm"
- },
- {
- "idiom" : "watch-marketing",
- "size" : "1024x1024",
- "scale" : "1x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/OCKSample/OCKSample/Supporting Files/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/OCKSample/OCKSample/Supporting Files/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
deleted file mode 100644
index 14728df6d45c6935b675674daef8fa86c06349c6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 35097
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
W*(UqDbu
zSVUAzTtb3XQc7A_hE0~48B-xMlbpPQqLPxb3a6@?x`w8bl9slPt|&8xLOnTsB?vIk
zGc6nc7LSLp47rqI{VAFINEKs1G-LE6~V1$%~|hofXDHico~7~v=t5s9fT
z$}<`x3S(l0Fcrqd>tUuIy@W(`bxFyvs76UeA9Pup~1kCVutgOk{Og**S0n
zQByd-RB~<}TwQ*$VGOQ3!&gw~Py|s{TvE!y&xA`M6LVQ?c||2qT@`!09y1eeg-lFk
zTnW`RwH9^tWvJqq*_An_q0xt(pP7k}LQuSmVu}rxB85r{iBktG?1`;D0NL_cE~YMw
QW&i*H07*qoM6N<$f>;2wcK`qY
diff --git a/OCKSample/OCKSample/Supporting Files/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png b/OCKSample/OCKSample/Supporting Files/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png
deleted file mode 100644
index 2c7e444383ceca012839f1808cee57bb056829a6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1457
zcmV;i1y1^jP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0006^
zP)t-s?mt)VKUeNQSMESq?KMv9DMafbJ?kJm>?cC)GEDA0Rqj4k?KDm7C`0WtP3}Qi
z>m)zxA3N?mRPbDJ^KyjqdyDgRhVfx_?n7JbB|z&PI_)-3?m}7aI#Tgnar1PB@nCf8
zB0larRO~86>mEAsUvv1dx&7to|NsB}?eO`($MboL>@Z5}8#nGeRqjDp@@;_lx4`}A
z>;3EP`MJXKYkuq_Kkh?X?m}AY9Xa^4z5LqW@^ppk8aC}ON$M6e@nd%T&C~kB%kNBL
z>lroc8#wP!X8r5#_^h_ty~`peSm9y#g_EBLa!>l!!w
zl``jA3XDbkM@|Q^LUB%lc4m1k?bx=
z?@na@{QdD~dG0w<{M+CD_4n>QR`F(e^nj4;BtQGv-v09R>KQike2w;-sO>mW{M_OG
z@$>C4O6wdr>J>Bit+)Eh(CQmE?mAQKB|-h;=KlBi|NZ^y7c}u@c=Upk>J&2S5-{_4
ziuRYI>Ju>Ye~KZrgHc3Bh
z??+zlL|gTgqWG$`@m_NN^!4&_gXlZccElB&*+469L^@*76
zGfeF@PxOP6?@eRtAUo|YNB{r;ov;!R00002bW%=J;q8S)l*`00Cl4M?}MlXpTYv
z000SaNLh0L01FZT01FZU(%pXi00007bV*G`2jB=D5H}x5x_b}+00N;&L_t(o!|mDk
zQxicH2k_)ABq8lgByu4^lZbj2atdk=rC4IejwnIYL@D+zcEpAzQL&()V(-28{+F4^
z4-f*`w~%qh@!pT$x&6$}&g|~nIfX)*)KVxQ$)!*x*Hg-%49cJk%HZDy38bW|)GAGy
zmUIerdP6ic>Ifsq>H3+>{nIT2GI(pI&E6i`v(zfxz;w$X2j^6~>?|NZID5#@VM4Tq
zj~F>B$IStVB-=20OzxjBZ|u17Ru4ggQoebD&`}c$3X6EjRy=8Pr*O(tFCj>fpEiAl
z5K}WXv-Fv>W3xFWb448JQO%n#bg2ak7cK6Z364@80}`WQN!(bWY-xP9EUTO#K)bI(
zK-Tg~%nVn!S7Je7mBvp6NnkbF6V`YM71TPb@L+XKEfv(mT0AJME2o0%H!yfYfr<(`
zH?n}6vZW=9kCgK4su72VZr0Y90G*Kh7&mNq&|o_u|Wzs
zkSpku00RPqPhq^%XPN*9a>29b=-&BSjf4cF7wH8m=m_wD1;NvNk>*`$>9$|$0VJgL
za$@gFtBVB$qP^Od$h&sEkpmVGL~~1mgYib#*1eaY;S}91H+%AKg>Tz|6^yj7zB{?y
zad+?CZ{mO*1R_0n_$c0c{KN+YdIJJH)tH`j^`57yc|Y_L1Suu_BBr-{`Ra8YpJ)W_
zSs{{~H*Y(h}00000
LNkvXXu0mjfr@h004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0006^
zP)t-s?mt)VKUeNQSMESq?KMv9DMafbJ?kJm>?cC)GEDA0Rqj4k?KDm7C`0WtP3}Qi
z>m)zxA3N?mRPbDJ^KyjqdyDgRhVfx_?n7JbB|z&PI_)-3?m}7aI#Tgnar1PB@nCf8
zB0larRO~86>mEAsUvv1dx&7to|NsB}?eO`($MboL>@Z5}8#nGeRqjDp@@;_lx4`}A
z>;3EP`MJXKYkuq_Kkh?X?m}AY9Xa^4z5LqW@^ppk8aC}ON$M6e@nd%T&C~kB%kNBL
z>lroc8#wP!X8r5#_^h_ty~`peSm9y#g_EBLa!>l!!w
z