[
  {
    "path": ".gitignore",
    "content": ".env\n*.m4a"
  },
  {
    "path": ".python-version",
    "content": "3.11\n"
  },
  {
    "path": "README.md",
    "content": "# Humane Watch App\n\n## Prerequisites\n\n- macOS with the latest version of Xcode installed.\n- Python 3 and Flask installed for the server side.\n- An Apple Watch or an iOS simulator that supports watchOS.\n\n## Setting Up the Xcode Project\n\n1. **Clone the Repository**: Clone the project repository to your local machine. `git clone https://github.com/Olivia-li/humane.watch.git`\n\n2. **Open the Project in Xcode**:\n- Navigate to the cloned directory.\n- Open the `.xcodeproj` file in Xcode.\n\n3. **Configure the Project**:\n- Select your Apple Watch target in Xcode.\n- Configure the signing with your Apple Developer account.\n\n4. **Build the Application**:\n- Select your target device (Apple Watch or Simulator).\n- Click on the ‘Build’ button (Play icon) in Xcode to compile the project.\n\n## Running the Flask Server\n\n1. **Install dependencies**: `pip install flask`\n2. **Start the Flask Server**: `python flask_server.py`\n\n\n"
  },
  {
    "path": "flask_server.py",
    "content": "from flask import Flask, request, send_file\nfrom dotenv import load_dotenv\nfrom openai import OpenAI\nimport whisper\nimport os\nimport time\n\napp = Flask(__name__)\n\n@app.route('/api', methods=['POST'])\ndef upload_file():\n    start_time = time.time()\n\n    if 'file' not in request.files:\n        app.logger.error('No file part in the request')\n        return 'No file part', 400\n\n    file = request.files['file']\n\n    if file.filename == '':\n        app.logger.error('No selected file')\n        return 'No selected file', 400\n\n    download_start = time.time()\n    path = os.path.join(os.getcwd(), \"recording.m4a\")\n    file.save(path)\n    download_end = time.time()\n\n    transcribe_start = time.time()\n    result = model.transcribe(path)\n    transcribe_end = time.time()\n\n    prompt = result[\"text\"]\n\n    gpt4_start = time.time()\n    completion = client.chat.completions.create(\n        model=\"gpt-4-1106-preview\",\n        max_tokens=80,\n        messages=[\n            {\"role\": \"system\", \"content\": \"You are a helpful assistant. Give only short answers. Be extremely concise. If you hear a language that's not in English. Translate it to English.\"},\n            {\"role\": \"user\", \"content\": prompt}\n        ]\n    )\n    gpt4_end = time.time()\n\n    print(completion.choices[0].message.content)\n\n    upload_start = time.time()\n    response = client.audio.speech.create(\n        model=\"tts-1\",\n        voice=\"alloy\",\n        response_format=\"aac\",\n        input=completion.choices[0].message.content\n    )\n\n    response.stream_to_file(\"output.m4a\")\n    upload_end = time.time()\n\n    total_time = time.time() - start_time\n\n    print(f\"Download Time: {download_end - download_start:.2f} seconds\")\n    print(f\"Transcribe Time: {transcribe_end - transcribe_start:.2f} seconds\")\n    print(f\"GPT-4 Response Time: {gpt4_end - gpt4_start:.2f} seconds\")\n    print(f\"Upload Time: {upload_end - upload_start:.2f} seconds\")\n    print(f\"Total Time: {total_time:.2f} seconds\")\n\n    return send_file(\"output.m4a\", mimetype=\"audio/m4a\")\n\nif __name__ == '__main__':\n    load_dotenv() \n    client = OpenAI()\n    model = whisper.load_model(\"tiny\")\n    app.run(host='0.0.0.0', port=3000, debug=True)\n"
  },
  {
    "path": "humane Watch App/Assets.xcassets/AccentColor.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "humane Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"platform\" : \"watchos\",\n      \"size\" : \"1024x1024\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "humane Watch App/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "humane Watch App/AudioRecorder.swift",
    "content": "import WatchKit\nimport Foundation\nimport AVFoundation\nimport Combine\n\n\nclass AudioRecorder: NSObject, ObservableObject, AVAudioRecorderDelegate {\n    private var audioRecorder: AVAudioRecorder?\n    private var audioPlayer: AVAudioPlayer?\n    @Published var isRecording = false\n\n    override init() {\n        super.init()\n        setupAudioRecorder()\n    }\n\n    private func setupAudioRecorder() {\n        let audioSession = AVAudioSession.sharedInstance()\n        do {\n            try audioSession.setCategory(.playAndRecord, mode: .default)\n            try audioSession.setActive(true)\n\n            let timestamp = DateFormatter.localizedString(from: Date(), dateStyle: .medium, timeStyle: .long)\n            let uniqueFilename = \"recording_\\(timestamp).m4a\"\n            let audioFilename = getDocumentsDirectory().appendingPathComponent(uniqueFilename)\n\n\n            let settings = [\n                AVFormatIDKey: Int(kAudioFormatMPEG4AAC),\n                AVSampleRateKey: 12000,\n                AVNumberOfChannelsKey: 1,\n                AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue\n            ]\n\n            audioRecorder = try AVAudioRecorder(url: audioFilename, settings: settings)\n            audioRecorder?.delegate = self\n        } catch {\n            print(\"Failed to set up audio recorder: \\(error)\")\n        }\n    }\n\n    func startRecording() {\n        setupAudioRecorder()\n        audioRecorder?.record()\n        isRecording = true\n    }\n\n    func stopRecording() {\n        audioRecorder?.stop()\n        isRecording = false\n    }\n    \n    func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) {\n       if !flag {\n           print(\"Recording finished unsuccessfully\")\n       } else {\n           uploadAudioFile()\n       }\n   }\n\n\n    private func getDocumentsDirectory() -> URL {\n        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)\n        return paths[0]\n    }\n\n    func uploadAudioFile() {\n        guard let audioURL = audioRecorder?.url else { return }\n\n        let url = URL(string: \"http://localhost:3000/api\")!\n        var request = URLRequest(url: url)\n        request.httpMethod = \"POST\"\n\n        let boundary = \"Boundary-\\(UUID().uuidString)\"\n        request.setValue(\"multipart/form-data; boundary=\\(boundary)\", forHTTPHeaderField: \"Content-Type\")\n\n        var data = Data()\n\n        data.append(\"\\r\\n--\\(boundary)\\r\\n\".data(using: .utf8)!)\n        data.append(\"Content-Disposition: form-data; name=\\\"file\\\"; filename=\\\"\\(audioURL.lastPathComponent)\\\"\\r\\n\".data(using: .utf8)!)\n        data.append(\"Content-Type: audio/m4a\\r\\n\\r\\n\".data(using: .utf8)!)\n        if let audioData = try? Data(contentsOf: audioURL) {\n            data.append(audioData)\n        }\n        data.append(\"\\r\\n--\\(boundary)--\\r\\n\".data(using: .utf8)!)\n\n        let task = URLSession.shared.uploadTask(with: request, from: data) { [weak self] data, response, error in\n            if let error = error {\n                print(\"Upload error: \\(error)\")\n                return\n            }\n            guard let responseData = data else {\n                print(\"No data received\")\n                return\n            }\n            self?.playAudio(data: responseData)\n        }\n        task.resume()\n    }\n\n    private func playAudio(data: Data) {\n        DispatchQueue.main.async {\n            do {\n                try AVAudioSession.sharedInstance().setCategory(.playback, mode: .voicePrompt)\n                try AVAudioSession.sharedInstance().setActive(true)\n\n                self.audioPlayer = try AVAudioPlayer(data: data)\n                self.audioPlayer?.prepareToPlay()\n                self.audioPlayer?.volume = 1.0\n                self.audioPlayer?.play()\n            } catch {\n                print(\"Audio playback error: \\(error)\")\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "humane Watch App/ContentView.swift",
    "content": "import SwiftUI\n\nstruct ContentView: View {\n    @StateObject var recordingManager = AudioRecorder()\n\n    var body: some View {\n        VStack {\n            if recordingManager.isRecording {\n                Button(\"Stop Recording\") {\n                    recordingManager.stopRecording()\n                }\n            } else {\n                Button(\"Start Recording\") {\n                    recordingManager.startRecording()\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "humane Watch App/DataExtension.swift",
    "content": "//\n//  DataExtension.swift\n//  humane Watch App\n//\n//  Created by Olivia Li on 11/15/23.\n//\n\nimport Foundation\n\nextension Data {\n    mutating func append(_ string: String) {\n        if let data = string.data(using: .utf8) {\n            append(data)\n        }\n    }\n}\n"
  },
  {
    "path": "humane Watch App/Preview Content/Preview Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "humane Watch App/humaneApp.swift",
    "content": "//\n//  humaneApp.swift\n//  humane Watch App\n//\n//  Created by Olivia Li on 11/15/23.\n//\n\nimport SwiftUI\n\n@main\nstruct humane_Watch_AppApp: App {\n\n    var body: some Scene {\n        WindowGroup {\n            ContentView()\n        }\n    }\n}\n"
  },
  {
    "path": "humane-Watch-App-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>NSExtensionPrincipalClass</key>\n\t<string>$(PRODUCT_MODULE_NAME).HostingController</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "humane.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 56;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tC7FB2F7F2B05AB8D004EA487 /* humane Watch App.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = C7FB2F7E2B05AB8D004EA487 /* humane Watch App.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\tC7FB2F842B05AB8D004EA487 /* humaneApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7FB2F832B05AB8D004EA487 /* humaneApp.swift */; };\n\t\tC7FB2F862B05AB8D004EA487 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7FB2F852B05AB8D004EA487 /* ContentView.swift */; };\n\t\tC7FB2F882B05AB8E004EA487 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C7FB2F872B05AB8E004EA487 /* Assets.xcassets */; };\n\t\tC7FB2F8B2B05AB8E004EA487 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C7FB2F8A2B05AB8E004EA487 /* Preview Assets.xcassets */; };\n\t\tC7FB2F992B05B2C7004EA487 /* AudioRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7FB2F982B05B2C7004EA487 /* AudioRecorder.swift */; };\n\t\tC7FB2F9D2B05CCF2004EA487 /* DataExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7FB2F9C2B05CCF2004EA487 /* DataExtension.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tC7FB2F802B05AB8D004EA487 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = C7FB2F722B05AB8D004EA487 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = C7FB2F7D2B05AB8D004EA487;\n\t\t\tremoteInfo = \"humane Watch App\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tC7FB2F912B05AB8E004EA487 /* Embed Watch Content */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"$(CONTENTS_FOLDER_PATH)/Watch\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tC7FB2F7F2B05AB8D004EA487 /* humane Watch App.app in Embed Watch Content */,\n\t\t\t);\n\t\t\tname = \"Embed Watch Content\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\tC7FB2F782B05AB8D004EA487 /* humane.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = humane.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC7FB2F7E2B05AB8D004EA487 /* humane Watch App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = \"humane Watch App.app\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tC7FB2F832B05AB8D004EA487 /* humaneApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = humaneApp.swift; sourceTree = \"<group>\"; };\n\t\tC7FB2F852B05AB8D004EA487 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = \"<group>\"; };\n\t\tC7FB2F872B05AB8E004EA487 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tC7FB2F8A2B05AB8E004EA487 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = \"Preview Assets.xcassets\"; sourceTree = \"<group>\"; };\n\t\tC7FB2F962B05B193004EA487 /* libAXSpeechManager.tbd */ = {isa = PBXFileReference; lastKnownFileType = \"sourcecode.text-based-dylib-definition\"; name = libAXSpeechManager.tbd; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS10.0.sdk/usr/lib/libAXSpeechManager.tbd; sourceTree = DEVELOPER_DIR; };\n\t\tC7FB2F982B05B2C7004EA487 /* AudioRecorder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRecorder.swift; sourceTree = \"<group>\"; };\n\t\tC7FB2F9A2B05B2F6004EA487 /* CoreML.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreML.framework; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS10.0.sdk/System/Library/Frameworks/CoreML.framework; sourceTree = DEVELOPER_DIR; };\n\t\tC7FB2F9C2B05CCF2004EA487 /* DataExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataExtension.swift; sourceTree = \"<group>\"; };\n\t\tC7FB2FA02B05E57B004EA487 /* humane-Watch-App-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = \"humane-Watch-App-Info.plist\"; sourceTree = SOURCE_ROOT; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tC7FB2F7B2B05AB8D004EA487 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tC7FB2F712B05AB8D004EA487 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC7FB2F822B05AB8D004EA487 /* humane Watch App */,\n\t\t\t\tC7FB2F792B05AB8D004EA487 /* Products */,\n\t\t\t\tC7FB2F952B05B185004EA487 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC7FB2F792B05AB8D004EA487 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC7FB2F782B05AB8D004EA487 /* humane.app */,\n\t\t\t\tC7FB2F7E2B05AB8D004EA487 /* humane Watch App.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC7FB2F822B05AB8D004EA487 /* humane Watch App */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC7FB2FA02B05E57B004EA487 /* humane-Watch-App-Info.plist */,\n\t\t\t\tC7FB2F832B05AB8D004EA487 /* humaneApp.swift */,\n\t\t\t\tC7FB2F852B05AB8D004EA487 /* ContentView.swift */,\n\t\t\t\tC7FB2F982B05B2C7004EA487 /* AudioRecorder.swift */,\n\t\t\t\tC7FB2F9C2B05CCF2004EA487 /* DataExtension.swift */,\n\t\t\t\tC7FB2F872B05AB8E004EA487 /* Assets.xcassets */,\n\t\t\t\tC7FB2F892B05AB8E004EA487 /* Preview Content */,\n\t\t\t);\n\t\t\tpath = \"humane Watch App\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC7FB2F892B05AB8E004EA487 /* Preview Content */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC7FB2F8A2B05AB8E004EA487 /* Preview Assets.xcassets */,\n\t\t\t);\n\t\t\tpath = \"Preview Content\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC7FB2F952B05B185004EA487 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tC7FB2F9A2B05B2F6004EA487 /* CoreML.framework */,\n\t\t\t\tC7FB2F962B05B193004EA487 /* libAXSpeechManager.tbd */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tC7FB2F772B05AB8D004EA487 /* humane */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C7FB2F922B05AB8E004EA487 /* Build configuration list for PBXNativeTarget \"humane\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC7FB2F762B05AB8D004EA487 /* Resources */,\n\t\t\t\tC7FB2F912B05AB8E004EA487 /* Embed Watch Content */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tC7FB2F812B05AB8D004EA487 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = humane;\n\t\t\tproductName = humane;\n\t\t\tproductReference = C7FB2F782B05AB8D004EA487 /* humane.app */;\n\t\t\tproductType = \"com.apple.product-type.application.watchapp2-container\";\n\t\t};\n\t\tC7FB2F7D2B05AB8D004EA487 /* humane Watch App */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = C7FB2F8E2B05AB8E004EA487 /* Build configuration list for PBXNativeTarget \"humane Watch App\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC7FB2F7A2B05AB8D004EA487 /* Sources */,\n\t\t\t\tC7FB2F7B2B05AB8D004EA487 /* Frameworks */,\n\t\t\t\tC7FB2F7C2B05AB8D004EA487 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"humane Watch App\";\n\t\t\tproductName = \"humane Watch App\";\n\t\t\tproductReference = C7FB2F7E2B05AB8D004EA487 /* humane Watch App.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tC7FB2F722B05AB8D004EA487 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = 1;\n\t\t\t\tLastSwiftUpdateCheck = 1500;\n\t\t\t\tLastUpgradeCheck = 1500;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tC7FB2F772B05AB8D004EA487 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 15.0.1;\n\t\t\t\t\t};\n\t\t\t\t\tC7FB2F7D2B05AB8D004EA487 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 15.0.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = C7FB2F752B05AB8D004EA487 /* Build configuration list for PBXProject \"humane\" */;\n\t\t\tcompatibilityVersion = \"Xcode 14.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = C7FB2F712B05AB8D004EA487;\n\t\t\tproductRefGroup = C7FB2F792B05AB8D004EA487 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tC7FB2F772B05AB8D004EA487 /* humane */,\n\t\t\t\tC7FB2F7D2B05AB8D004EA487 /* humane Watch App */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tC7FB2F762B05AB8D004EA487 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tC7FB2F7C2B05AB8D004EA487 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC7FB2F8B2B05AB8E004EA487 /* Preview Assets.xcassets in Resources */,\n\t\t\t\tC7FB2F882B05AB8E004EA487 /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tC7FB2F7A2B05AB8D004EA487 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tC7FB2F992B05B2C7004EA487 /* AudioRecorder.swift in Sources */,\n\t\t\t\tC7FB2F9D2B05CCF2004EA487 /* DataExtension.swift in Sources */,\n\t\t\t\tC7FB2F862B05AB8D004EA487 /* ContentView.swift in Sources */,\n\t\t\t\tC7FB2F842B05AB8D004EA487 /* humaneApp.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tC7FB2F812B05AB8D004EA487 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = C7FB2F7D2B05AB8D004EA487 /* humane Watch App */;\n\t\t\ttargetProxy = C7FB2F802B05AB8D004EA487 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\tC7FB2F8C2B05AB8E004EA487 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu17;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"DEBUG $(inherited)\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC7FB2F8D2B05AB8E004EA487 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu17;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tLOCALIZATION_PREFERS_STRING_CATALOGS = YES;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC7FB2F8F2B05AB8E004EA487 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"humane Watch App/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = RSR8K28Z58;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = \"humane-Watch-App-Info.plist\";\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = humane;\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"\";\n\t\t\t\tINFOPLIST_KEY_NSMicrophoneUsageDescription = \"Need access to microphone to communicate with the AI\";\n\t\t\t\tINFOPLIST_KEY_NSSpeechRecognitionUsageDescription = \"Need to recognize speech to create AI assistant answers\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations = \"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown\";\n\t\t\t\tINFOPLIST_KEY_WKWatchOnly = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.oliviali.humane.watchkitapp;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC7FB2F902B05AB8E004EA487 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_ASSET_PATHS = \"\\\"humane Watch App/Preview Content\\\"\";\n\t\t\t\tDEVELOPMENT_TEAM = RSR8K28Z58;\n\t\t\t\tENABLE_PREVIEWS = YES;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = \"humane-Watch-App-Info.plist\";\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = humane;\n\t\t\t\tINFOPLIST_KEY_LSApplicationCategoryType = \"\";\n\t\t\t\tINFOPLIST_KEY_NSMicrophoneUsageDescription = \"Need access to microphone to communicate with the AI\";\n\t\t\t\tINFOPLIST_KEY_NSSpeechRecognitionUsageDescription = \"Need to recognize speech to create AI assistant answers\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations = \"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown\";\n\t\t\t\tINFOPLIST_KEY_WKWatchOnly = YES;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.oliviali.humane.watchkitapp;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = watchos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = 4;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tWATCHOS_DEPLOYMENT_TARGET = 10.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tC7FB2F932B05AB8E004EA487 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = RSR8K28Z58;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = humane;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.oliviali.humane;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tC7FB2F942B05AB8E004EA487 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = RSR8K28Z58;\n\t\t\t\tINFOPLIST_KEY_CFBundleDisplayName = humane;\n\t\t\t\tMARKETING_VERSION = 1.0;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.oliviali.humane;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tC7FB2F752B05AB8D004EA487 /* Build configuration list for PBXProject \"humane\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC7FB2F8C2B05AB8E004EA487 /* Debug */,\n\t\t\t\tC7FB2F8D2B05AB8E004EA487 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC7FB2F8E2B05AB8E004EA487 /* Build configuration list for PBXNativeTarget \"humane Watch App\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC7FB2F8F2B05AB8E004EA487 /* Debug */,\n\t\t\t\tC7FB2F902B05AB8E004EA487 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tC7FB2F922B05AB8E004EA487 /* Build configuration list for PBXNativeTarget \"humane\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tC7FB2F932B05AB8E004EA487 /* Debug */,\n\t\t\t\tC7FB2F942B05AB8E004EA487 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = C7FB2F722B05AB8D004EA487 /* Project object */;\n}\n"
  },
  {
    "path": "humane.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "humane.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "humane.xcodeproj/xcuserdata/oliviali.xcuserdatad/xcschemes/xcschememanagement.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>SchemeUserState</key>\n\t<dict>\n\t\t<key>humane Watch App.xcscheme_^#shared#^_</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>0</integer>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  }
]