Repository: Olivia-li/humane.watch
Branch: main
Commit: 8fc3ba96446e
Files: 17
Total size: 28.0 KB
Directory structure:
gitextract_quibif4k/
├── .gitignore
├── .python-version
├── README.md
├── flask_server.py
├── humane Watch App/
│ ├── Assets.xcassets/
│ │ ├── AccentColor.colorset/
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── AudioRecorder.swift
│ ├── ContentView.swift
│ ├── DataExtension.swift
│ ├── Preview Content/
│ │ └── Preview Assets.xcassets/
│ │ └── Contents.json
│ └── humaneApp.swift
├── humane-Watch-App-Info.plist
└── humane.xcodeproj/
├── project.pbxproj
├── project.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
└── xcuserdata/
└── oliviali.xcuserdatad/
└── xcschemes/
└── xcschememanagement.plist
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
.env
*.m4a
================================================
FILE: .python-version
================================================
3.11
================================================
FILE: README.md
================================================
# Humane Watch App
## Prerequisites
- macOS with the latest version of Xcode installed.
- Python 3 and Flask installed for the server side.
- An Apple Watch or an iOS simulator that supports watchOS.
## Setting Up the Xcode Project
1. **Clone the Repository**: Clone the project repository to your local machine. `git clone https://github.com/Olivia-li/humane.watch.git`
2. **Open the Project in Xcode**:
- Navigate to the cloned directory.
- Open the `.xcodeproj` file in Xcode.
3. **Configure the Project**:
- Select your Apple Watch target in Xcode.
- Configure the signing with your Apple Developer account.
4. **Build the Application**:
- Select your target device (Apple Watch or Simulator).
- Click on the ‘Build’ button (Play icon) in Xcode to compile the project.
## Running the Flask Server
1. **Install dependencies**: `pip install flask`
2. **Start the Flask Server**: `python flask_server.py`
================================================
FILE: flask_server.py
================================================
from flask import Flask, request, send_file
from dotenv import load_dotenv
from openai import OpenAI
import whisper
import os
import time
app = Flask(__name__)
@app.route('/api', methods=['POST'])
def upload_file():
start_time = time.time()
if 'file' not in request.files:
app.logger.error('No file part in the request')
return 'No file part', 400
file = request.files['file']
if file.filename == '':
app.logger.error('No selected file')
return 'No selected file', 400
download_start = time.time()
path = os.path.join(os.getcwd(), "recording.m4a")
file.save(path)
download_end = time.time()
transcribe_start = time.time()
result = model.transcribe(path)
transcribe_end = time.time()
prompt = result["text"]
gpt4_start = time.time()
completion = client.chat.completions.create(
model="gpt-4-1106-preview",
max_tokens=80,
messages=[
{"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."},
{"role": "user", "content": prompt}
]
)
gpt4_end = time.time()
print(completion.choices[0].message.content)
upload_start = time.time()
response = client.audio.speech.create(
model="tts-1",
voice="alloy",
response_format="aac",
input=completion.choices[0].message.content
)
response.stream_to_file("output.m4a")
upload_end = time.time()
total_time = time.time() - start_time
print(f"Download Time: {download_end - download_start:.2f} seconds")
print(f"Transcribe Time: {transcribe_end - transcribe_start:.2f} seconds")
print(f"GPT-4 Response Time: {gpt4_end - gpt4_start:.2f} seconds")
print(f"Upload Time: {upload_end - upload_start:.2f} seconds")
print(f"Total Time: {total_time:.2f} seconds")
return send_file("output.m4a", mimetype="audio/m4a")
if __name__ == '__main__':
load_dotenv()
client = OpenAI()
model = whisper.load_model("tiny")
app.run(host='0.0.0.0', port=3000, debug=True)
================================================
FILE: humane Watch App/Assets.xcassets/AccentColor.colorset/Contents.json
================================================
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: humane Watch App/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"platform" : "watchos",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: humane Watch App/Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: humane Watch App/AudioRecorder.swift
================================================
import WatchKit
import Foundation
import AVFoundation
import Combine
class AudioRecorder: NSObject, ObservableObject, AVAudioRecorderDelegate {
private var audioRecorder: AVAudioRecorder?
private var audioPlayer: AVAudioPlayer?
@Published var isRecording = false
override init() {
super.init()
setupAudioRecorder()
}
private func setupAudioRecorder() {
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(.playAndRecord, mode: .default)
try audioSession.setActive(true)
let timestamp = DateFormatter.localizedString(from: Date(), dateStyle: .medium, timeStyle: .long)
let uniqueFilename = "recording_\(timestamp).m4a"
let audioFilename = getDocumentsDirectory().appendingPathComponent(uniqueFilename)
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 12000,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
audioRecorder = try AVAudioRecorder(url: audioFilename, settings: settings)
audioRecorder?.delegate = self
} catch {
print("Failed to set up audio recorder: \(error)")
}
}
func startRecording() {
setupAudioRecorder()
audioRecorder?.record()
isRecording = true
}
func stopRecording() {
audioRecorder?.stop()
isRecording = false
}
func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) {
if !flag {
print("Recording finished unsuccessfully")
} else {
uploadAudioFile()
}
}
private func getDocumentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths[0]
}
func uploadAudioFile() {
guard let audioURL = audioRecorder?.url else { return }
let url = URL(string: "http://localhost:3000/api")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
let boundary = "Boundary-\(UUID().uuidString)"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
var data = Data()
data.append("\r\n--\(boundary)\r\n".data(using: .utf8)!)
data.append("Content-Disposition: form-data; name=\"file\"; filename=\"\(audioURL.lastPathComponent)\"\r\n".data(using: .utf8)!)
data.append("Content-Type: audio/m4a\r\n\r\n".data(using: .utf8)!)
if let audioData = try? Data(contentsOf: audioURL) {
data.append(audioData)
}
data.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)
let task = URLSession.shared.uploadTask(with: request, from: data) { [weak self] data, response, error in
if let error = error {
print("Upload error: \(error)")
return
}
guard let responseData = data else {
print("No data received")
return
}
self?.playAudio(data: responseData)
}
task.resume()
}
private func playAudio(data: Data) {
DispatchQueue.main.async {
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .voicePrompt)
try AVAudioSession.sharedInstance().setActive(true)
self.audioPlayer = try AVAudioPlayer(data: data)
self.audioPlayer?.prepareToPlay()
self.audioPlayer?.volume = 1.0
self.audioPlayer?.play()
} catch {
print("Audio playback error: \(error)")
}
}
}
}
================================================
FILE: humane Watch App/ContentView.swift
================================================
import SwiftUI
struct ContentView: View {
@StateObject var recordingManager = AudioRecorder()
var body: some View {
VStack {
if recordingManager.isRecording {
Button("Stop Recording") {
recordingManager.stopRecording()
}
} else {
Button("Start Recording") {
recordingManager.startRecording()
}
}
}
}
}
================================================
FILE: humane Watch App/DataExtension.swift
================================================
//
// DataExtension.swift
// humane Watch App
//
// Created by Olivia Li on 11/15/23.
//
import Foundation
extension Data {
mutating func append(_ string: String) {
if let data = string.data(using: .utf8) {
append(data)
}
}
}
================================================
FILE: humane Watch App/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: humane Watch App/humaneApp.swift
================================================
//
// humaneApp.swift
// humane Watch App
//
// Created by Olivia Li on 11/15/23.
//
import SwiftUI
@main
struct humane_Watch_AppApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
================================================
FILE: humane-Watch-App-Info.plist
================================================
NSExtensionPrincipalClass
$(PRODUCT_MODULE_NAME).HostingController
================================================
FILE: humane.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
C7FB2F7F2B05AB8D004EA487 /* humane Watch App.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = C7FB2F7E2B05AB8D004EA487 /* humane Watch App.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
C7FB2F842B05AB8D004EA487 /* humaneApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7FB2F832B05AB8D004EA487 /* humaneApp.swift */; };
C7FB2F862B05AB8D004EA487 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7FB2F852B05AB8D004EA487 /* ContentView.swift */; };
C7FB2F882B05AB8E004EA487 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C7FB2F872B05AB8E004EA487 /* Assets.xcassets */; };
C7FB2F8B2B05AB8E004EA487 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C7FB2F8A2B05AB8E004EA487 /* Preview Assets.xcassets */; };
C7FB2F992B05B2C7004EA487 /* AudioRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7FB2F982B05B2C7004EA487 /* AudioRecorder.swift */; };
C7FB2F9D2B05CCF2004EA487 /* DataExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7FB2F9C2B05CCF2004EA487 /* DataExtension.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
C7FB2F802B05AB8D004EA487 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C7FB2F722B05AB8D004EA487 /* Project object */;
proxyType = 1;
remoteGlobalIDString = C7FB2F7D2B05AB8D004EA487;
remoteInfo = "humane Watch App";
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
C7FB2F912B05AB8E004EA487 /* Embed Watch Content */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "$(CONTENTS_FOLDER_PATH)/Watch";
dstSubfolderSpec = 16;
files = (
C7FB2F7F2B05AB8D004EA487 /* humane Watch App.app in Embed Watch Content */,
);
name = "Embed Watch Content";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
C7FB2F782B05AB8D004EA487 /* humane.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = humane.app; sourceTree = BUILT_PRODUCTS_DIR; };
C7FB2F7E2B05AB8D004EA487 /* humane Watch App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "humane Watch App.app"; sourceTree = BUILT_PRODUCTS_DIR; };
C7FB2F832B05AB8D004EA487 /* humaneApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = humaneApp.swift; sourceTree = ""; };
C7FB2F852B05AB8D004EA487 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
C7FB2F872B05AB8E004EA487 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
C7FB2F8A2B05AB8E004EA487 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
C7FB2F962B05B193004EA487 /* 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; };
C7FB2F982B05B2C7004EA487 /* AudioRecorder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioRecorder.swift; sourceTree = ""; };
C7FB2F9A2B05B2F6004EA487 /* 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; };
C7FB2F9C2B05CCF2004EA487 /* DataExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataExtension.swift; sourceTree = ""; };
C7FB2FA02B05E57B004EA487 /* humane-Watch-App-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "humane-Watch-App-Info.plist"; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
C7FB2F7B2B05AB8D004EA487 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
C7FB2F712B05AB8D004EA487 = {
isa = PBXGroup;
children = (
C7FB2F822B05AB8D004EA487 /* humane Watch App */,
C7FB2F792B05AB8D004EA487 /* Products */,
C7FB2F952B05B185004EA487 /* Frameworks */,
);
sourceTree = "";
};
C7FB2F792B05AB8D004EA487 /* Products */ = {
isa = PBXGroup;
children = (
C7FB2F782B05AB8D004EA487 /* humane.app */,
C7FB2F7E2B05AB8D004EA487 /* humane Watch App.app */,
);
name = Products;
sourceTree = "";
};
C7FB2F822B05AB8D004EA487 /* humane Watch App */ = {
isa = PBXGroup;
children = (
C7FB2FA02B05E57B004EA487 /* humane-Watch-App-Info.plist */,
C7FB2F832B05AB8D004EA487 /* humaneApp.swift */,
C7FB2F852B05AB8D004EA487 /* ContentView.swift */,
C7FB2F982B05B2C7004EA487 /* AudioRecorder.swift */,
C7FB2F9C2B05CCF2004EA487 /* DataExtension.swift */,
C7FB2F872B05AB8E004EA487 /* Assets.xcassets */,
C7FB2F892B05AB8E004EA487 /* Preview Content */,
);
path = "humane Watch App";
sourceTree = "";
};
C7FB2F892B05AB8E004EA487 /* Preview Content */ = {
isa = PBXGroup;
children = (
C7FB2F8A2B05AB8E004EA487 /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
C7FB2F952B05B185004EA487 /* Frameworks */ = {
isa = PBXGroup;
children = (
C7FB2F9A2B05B2F6004EA487 /* CoreML.framework */,
C7FB2F962B05B193004EA487 /* libAXSpeechManager.tbd */,
);
name = Frameworks;
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
C7FB2F772B05AB8D004EA487 /* humane */ = {
isa = PBXNativeTarget;
buildConfigurationList = C7FB2F922B05AB8E004EA487 /* Build configuration list for PBXNativeTarget "humane" */;
buildPhases = (
C7FB2F762B05AB8D004EA487 /* Resources */,
C7FB2F912B05AB8E004EA487 /* Embed Watch Content */,
);
buildRules = (
);
dependencies = (
C7FB2F812B05AB8D004EA487 /* PBXTargetDependency */,
);
name = humane;
productName = humane;
productReference = C7FB2F782B05AB8D004EA487 /* humane.app */;
productType = "com.apple.product-type.application.watchapp2-container";
};
C7FB2F7D2B05AB8D004EA487 /* humane Watch App */ = {
isa = PBXNativeTarget;
buildConfigurationList = C7FB2F8E2B05AB8E004EA487 /* Build configuration list for PBXNativeTarget "humane Watch App" */;
buildPhases = (
C7FB2F7A2B05AB8D004EA487 /* Sources */,
C7FB2F7B2B05AB8D004EA487 /* Frameworks */,
C7FB2F7C2B05AB8D004EA487 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "humane Watch App";
productName = "humane Watch App";
productReference = C7FB2F7E2B05AB8D004EA487 /* humane Watch App.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
C7FB2F722B05AB8D004EA487 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1500;
LastUpgradeCheck = 1500;
TargetAttributes = {
C7FB2F772B05AB8D004EA487 = {
CreatedOnToolsVersion = 15.0.1;
};
C7FB2F7D2B05AB8D004EA487 = {
CreatedOnToolsVersion = 15.0.1;
};
};
};
buildConfigurationList = C7FB2F752B05AB8D004EA487 /* Build configuration list for PBXProject "humane" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = C7FB2F712B05AB8D004EA487;
productRefGroup = C7FB2F792B05AB8D004EA487 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
C7FB2F772B05AB8D004EA487 /* humane */,
C7FB2F7D2B05AB8D004EA487 /* humane Watch App */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
C7FB2F762B05AB8D004EA487 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
C7FB2F7C2B05AB8D004EA487 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C7FB2F8B2B05AB8E004EA487 /* Preview Assets.xcassets in Resources */,
C7FB2F882B05AB8E004EA487 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
C7FB2F7A2B05AB8D004EA487 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C7FB2F992B05B2C7004EA487 /* AudioRecorder.swift in Sources */,
C7FB2F9D2B05CCF2004EA487 /* DataExtension.swift in Sources */,
C7FB2F862B05AB8D004EA487 /* ContentView.swift in Sources */,
C7FB2F842B05AB8D004EA487 /* humaneApp.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
C7FB2F812B05AB8D004EA487 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = C7FB2F7D2B05AB8D004EA487 /* humane Watch App */;
targetProxy = C7FB2F802B05AB8D004EA487 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
C7FB2F8C2B05AB8E004EA487 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
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;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
C7FB2F8D2B05AB8E004EA487 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
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;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SWIFT_COMPILATION_MODE = wholemodule;
};
name = Release;
};
C7FB2F8F2B05AB8E004EA487 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"humane Watch App/Preview Content\"";
DEVELOPMENT_TEAM = RSR8K28Z58;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "humane-Watch-App-Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = humane;
INFOPLIST_KEY_LSApplicationCategoryType = "";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Need access to microphone to communicate with the AI";
INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "Need to recognize speech to create AI assistant answers";
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
INFOPLIST_KEY_WKWatchOnly = YES;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.oliviali.humane.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 4;
WATCHOS_DEPLOYMENT_TARGET = 10.0;
};
name = Debug;
};
C7FB2F902B05AB8E004EA487 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"humane Watch App/Preview Content\"";
DEVELOPMENT_TEAM = RSR8K28Z58;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "humane-Watch-App-Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = humane;
INFOPLIST_KEY_LSApplicationCategoryType = "";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Need access to microphone to communicate with the AI";
INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "Need to recognize speech to create AI assistant answers";
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
INFOPLIST_KEY_WKWatchOnly = YES;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.oliviali.humane.watchkitapp;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 4;
VALIDATE_PRODUCT = YES;
WATCHOS_DEPLOYMENT_TARGET = 10.0;
};
name = Release;
};
C7FB2F932B05AB8E004EA487 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = RSR8K28Z58;
INFOPLIST_KEY_CFBundleDisplayName = humane;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.oliviali.humane;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_VERSION = 5.0;
};
name = Debug;
};
C7FB2F942B05AB8E004EA487 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = RSR8K28Z58;
INFOPLIST_KEY_CFBundleDisplayName = humane;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.oliviali.humane;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_VERSION = 5.0;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C7FB2F752B05AB8D004EA487 /* Build configuration list for PBXProject "humane" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C7FB2F8C2B05AB8E004EA487 /* Debug */,
C7FB2F8D2B05AB8E004EA487 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C7FB2F8E2B05AB8E004EA487 /* Build configuration list for PBXNativeTarget "humane Watch App" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C7FB2F8F2B05AB8E004EA487 /* Debug */,
C7FB2F902B05AB8E004EA487 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C7FB2F922B05AB8E004EA487 /* Build configuration list for PBXNativeTarget "humane" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C7FB2F932B05AB8E004EA487 /* Debug */,
C7FB2F942B05AB8E004EA487 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = C7FB2F722B05AB8D004EA487 /* Project object */;
}
================================================
FILE: humane.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: humane.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: humane.xcodeproj/xcuserdata/oliviali.xcuserdatad/xcschemes/xcschememanagement.plist
================================================
SchemeUserState
humane Watch App.xcscheme_^#shared#^_
orderHint
0