├── .gitattributes ├── promo.png ├── HelloWorld ├── .DS_Store ├── HelloWorld │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── EnvironmentValues+Extensions.swift │ ├── HelloWorldApp.swift │ ├── View+Extensions.swift │ ├── Summarizer.swift │ ├── ContentView.swift │ ├── ToastView.swift │ └── transcript.txt └── HelloWorld.xcodeproj │ ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── azamsharp.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ ├── xcuserdata │ └── azamsharp.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ └── xcschememanagement.plist │ └── project.pbxproj ├── Jokes ├── Jokes │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── JokesApp.swift │ └── ContentView.swift └── Jokes.xcodeproj │ ├── project.xcworkspace │ └── contents.xcworkspacedata │ └── project.pbxproj ├── Yummy ├── Yummy │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Models │ │ ├── DTOs │ │ │ └── DTOs.swift │ │ ├── Persistence │ │ │ └── RecipeModel.swift │ │ ├── Ingredient.swift │ │ └── Generables │ │ │ └── Recipe.swift │ ├── Extensions │ │ └── EnvironmentValues+Extensions.swift │ ├── Utils │ │ ├── PreviewContainer.swift │ │ └── Constants.swift │ ├── Networking │ │ └── HTTPClient.swift │ ├── YummyApp.swift │ ├── Tools │ │ └── RecipeTool.swift │ ├── Screens │ │ ├── FavoriteRecipeListScreen.swift │ │ ├── RecipeDetailScreen.swift │ │ └── RecipeListScreen.swift │ ├── ContentView.swift │ ├── Views │ │ └── IngredientSelectorView.swift │ └── Services │ │ └── RecipeRecommender.swift └── Yummy.xcodeproj │ ├── project.xcworkspace │ └── contents.xcworkspacedata │ ├── xcshareddata │ └── xcschemes │ │ └── Yummy.xcscheme │ └── project.pbxproj ├── Travel ├── Travel │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── TravelApp.swift │ ├── Models │ │ ├── Park.swift │ │ └── Generables │ │ │ └── Itinerary.swift │ ├── Views │ │ ├── ItineraryView.swift │ │ └── TripPlanningView.swift │ ├── DayView.swift │ ├── ActivityView.swift │ ├── ParkDetailScreen.swift │ ├── ParkListScreen.swift │ ├── Planners │ │ └── IternaryPlanner.swift │ ├── Tools │ │ └── NearbyPointsOfInterestTool.swift │ ├── parkdetailscreen-bk.txt │ └── Resources │ │ └── parks.json └── Travel.xcodeproj │ ├── project.xcworkspace │ └── contents.xcworkspacedata │ └── project.pbxproj ├── SwiftExams ├── SwiftExams │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── SwiftExamsApp.swift │ ├── Views │ │ ├── ChoiceView.swift │ │ ├── ScoreOverlayView.swift │ │ └── QuestionView.swift │ ├── Services │ │ └── Grader.swift │ ├── Models │ │ └── SkillLevel.swift │ ├── Generators │ │ ├── ExamGenerator.swift │ │ └── Exam.swift │ └── Screens │ │ ├── SkillListScreen.swift │ │ └── ExamScreen.swift └── SwiftExams.xcodeproj │ ├── project.xcworkspace │ └── contents.xcworkspacedata │ └── project.pbxproj ├── .gitignore └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /promo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/azamsharpschool/FoundationModels-Examples/HEAD/promo.png -------------------------------------------------------------------------------- /HelloWorld/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/azamsharpschool/FoundationModels-Examples/HEAD/HelloWorld/.DS_Store -------------------------------------------------------------------------------- /Jokes/Jokes/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Yummy/Yummy/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Travel/Travel/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld/EnvironmentValues+Extensions.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import SwiftUI 3 | 4 | extension EnvironmentValues { 5 | @Entry var showToast = ShowToastAction(action: { _ in }) 6 | } 7 | -------------------------------------------------------------------------------- /Jokes/Jokes.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Travel/Travel.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Yummy/Yummy.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Jokes/Jokes/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Travel/Travel/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Yummy/Yummy/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld.xcodeproj/xcuserdata/azamsharp.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /Yummy/Yummy/Models/DTOs/DTOs.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DTOs.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/16/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct RecipeDTO: Decodable { 11 | let name: String 12 | let description: String 13 | } 14 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/azamsharp.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/azamsharpschool/FoundationModels-Examples/HEAD/HelloWorld/HelloWorld.xcodeproj/project.xcworkspace/xcuserdata/azamsharp.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Yummy/Yummy/Extensions/EnvironmentValues+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EnvironmentValues+Extensions.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/16/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | extension EnvironmentValues { 11 | 12 | @Entry var httpClient = HTTPClient() 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Jokes/Jokes/JokesApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JokesApp.swift 3 | // Jokes 4 | // 5 | // Created by Mohammad Azam on 6/13/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct JokesApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/SwiftExamsApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftExamsApp.swift 3 | // SwiftExams 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct SwiftExamsApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | SkillListScreen() 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Yummy/Yummy/Utils/PreviewContainer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PreviewContainer.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/15/25. 6 | // 7 | 8 | import Foundation 9 | import SwiftData 10 | 11 | var previewContainer: ModelContainer = { 12 | try! ModelContainer(for: RecipeModel.self, configurations: ModelConfiguration(isStoredInMemoryOnly: true)) 13 | }() 14 | -------------------------------------------------------------------------------- /Travel/Travel/TravelApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TravelApp.swift 3 | // Travel 4 | // 5 | // Created by Mohammad Azam on 6/11/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct TravelApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | NavigationStack { 15 | ParkListScreen() 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld/HelloWorldApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HelloWorldApp.swift 3 | // HelloWorld 4 | // 5 | // Created by Mohammad Azam on 6/9/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct HelloWorldApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | .environment(Summarizer()) 16 | .withToast() 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Yummy/Yummy/Models/Persistence/RecipeModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RecipeModel.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/15/25. 6 | // 7 | 8 | import Foundation 9 | import SwiftData 10 | 11 | @Model 12 | class RecipeModel { 13 | var name: String 14 | var desc: String 15 | 16 | init(name: String, desc: String) { 17 | self.name = name 18 | self.desc = desc 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Yummy/Yummy/Utils/Constants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Constants.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/16/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Constants { 11 | 12 | struct Urls { 13 | 14 | static let recipes = URL(string: "https://gist.githubusercontent.com/azamsharpschool/02442b60fc3c9be7dfa2b73e0365b0d5/raw/5dea3b71b1bcf71a5c6871a8b0e98b82e7af6a80/recipes.json")! 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld.xcodeproj/xcuserdata/azamsharp.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | HelloWorld.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Yummy/Yummy/Networking/HTTPClient.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HTTPClient.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/16/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct HTTPClient { 11 | 12 | func loadRecipes() async throws -> [RecipeDTO] { 13 | print("loadRecipes") 14 | let (data, _) = try await URLSession.shared.data(from: Constants.Urls.recipes) 15 | return try JSONDecoder().decode([RecipeDTO].self, from: data) 16 | } 17 | 18 | } 19 | 20 | extension HTTPClient { 21 | static let development = HTTPClient() 22 | } 23 | -------------------------------------------------------------------------------- /Yummy/Yummy/YummyApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // YummyApp.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/14/25. 6 | // 7 | 8 | import SwiftUI 9 | import SwiftData 10 | 11 | @main 12 | struct YummyApp: App { 13 | 14 | @State private var recipeRecommender = RecipeRecommender(httpClient: .development) 15 | 16 | var body: some Scene { 17 | WindowGroup { 18 | NavigationStack { 19 | ContentView() 20 | } 21 | .modelContainer(for: RecipeModel.self) 22 | .environment(recipeRecommender) 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Travel/Travel/Models/Park.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Park.swift 3 | // Travel 4 | // 5 | // Created by Mohammad Azam on 6/11/25. 6 | // 7 | 8 | import Foundation 9 | import MapKit 10 | 11 | struct Park: Codable, Identifiable { 12 | var id = UUID() 13 | let name: String 14 | let description: String 15 | let latitude: Double 16 | let longitude: Double 17 | 18 | var location: CLLocationCoordinate2D { 19 | CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 20 | } 21 | 22 | private enum CodingKeys: String, CodingKey { 23 | case name, description, latitude, longitude 24 | } 25 | } 26 | 27 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld/View+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // View+Extensions.swift 3 | // Platzi 4 | // 5 | // Created by Mohammad Azam on 6/8/25. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | 11 | extension View { 12 | func priceTag() -> some View { 13 | self 14 | .font(.caption2) 15 | .padding(6) 16 | .background(Color.green) 17 | .foregroundStyle(.white) 18 | .clipShape(RoundedRectangle(cornerRadius: 10.0, style: .continuous)) 19 | .listRowSeparator(.hidden) 20 | } 21 | 22 | 23 | func withToast() -> some View { 24 | modifier(ToastModifier()) 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Yummy/Yummy/Models/Ingredient.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Ingredient.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/14/25. 6 | // 7 | 8 | import Foundation 9 | import FoundationModels 10 | 11 | struct Ingredient: Identifiable, Hashable, Sendable { 12 | let id = UUID() 13 | let name: String 14 | } 15 | 16 | extension Ingredient: InstructionsRepresentable { 17 | 18 | var instructionsRepresentation: Instructions { 19 | .init(name) 20 | } 21 | 22 | static var preview: Set { 23 | [ 24 | Ingredient(name: "Tomato"), 25 | Ingredient(name: "Chicken"), 26 | Ingredient(name: "Spinach"), 27 | Ingredient(name: "Garlic") 28 | ] 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Views/ChoiceView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChoiceView.swift 3 | // SwiftExams 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import SwiftUI 9 | import FoundationModels 10 | 11 | struct ChoiceView: View { 12 | 13 | let choice: Choice.PartiallyGenerated 14 | let onSelect: (Choice.PartiallyGenerated) -> Void 15 | 16 | var body: some View { 17 | HStack { 18 | Image(systemName: "circle") 19 | .onTapGesture { 20 | onSelect(choice) 21 | } 22 | Text(choice.text ?? "") 23 | } 24 | } 25 | } 26 | 27 | #Preview { 28 | ChoiceView(choice: Choice(text: "Choice text", isCorrect: true).asPartiallyGenerated(), onSelect: { _ in }) 29 | } 30 | -------------------------------------------------------------------------------- /Jokes/Jokes/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "idiom" : "universal", 16 | "platform" : "ios", 17 | "size" : "1024x1024" 18 | }, 19 | { 20 | "appearances" : [ 21 | { 22 | "appearance" : "luminosity", 23 | "value" : "tinted" 24 | } 25 | ], 26 | "idiom" : "universal", 27 | "platform" : "ios", 28 | "size" : "1024x1024" 29 | } 30 | ], 31 | "info" : { 32 | "author" : "xcode", 33 | "version" : 1 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Yummy/Yummy/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "idiom" : "universal", 16 | "platform" : "ios", 17 | "size" : "1024x1024" 18 | }, 19 | { 20 | "appearances" : [ 21 | { 22 | "appearance" : "luminosity", 23 | "value" : "tinted" 24 | } 25 | ], 26 | "idiom" : "universal", 27 | "platform" : "ios", 28 | "size" : "1024x1024" 29 | } 30 | ], 31 | "info" : { 32 | "author" : "xcode", 33 | "version" : 1 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Travel/Travel/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "idiom" : "universal", 16 | "platform" : "ios", 17 | "size" : "1024x1024" 18 | }, 19 | { 20 | "appearances" : [ 21 | { 22 | "appearance" : "luminosity", 23 | "value" : "tinted" 24 | } 25 | ], 26 | "idiom" : "universal", 27 | "platform" : "ios", 28 | "size" : "1024x1024" 29 | } 30 | ], 31 | "info" : { 32 | "author" : "xcode", 33 | "version" : 1 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "idiom" : "universal", 16 | "platform" : "ios", 17 | "size" : "1024x1024" 18 | }, 19 | { 20 | "appearances" : [ 21 | { 22 | "appearance" : "luminosity", 23 | "value" : "tinted" 24 | } 25 | ], 26 | "idiom" : "universal", 27 | "platform" : "ios", 28 | "size" : "1024x1024" 29 | } 30 | ], 31 | "info" : { 32 | "author" : "xcode", 33 | "version" : 1 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "idiom" : "universal", 16 | "platform" : "ios", 17 | "size" : "1024x1024" 18 | }, 19 | { 20 | "appearances" : [ 21 | { 22 | "appearance" : "luminosity", 23 | "value" : "tinted" 24 | } 25 | ], 26 | "idiom" : "universal", 27 | "platform" : "ios", 28 | "size" : "1024x1024" 29 | } 30 | ], 31 | "info" : { 32 | "author" : "xcode", 33 | "version" : 1 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # macOS 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | DerivedData/ 7 | *.pbxuser 8 | !default.pbxuser 9 | *.mode1v3 10 | !default.mode1v3 11 | *.mode2v3 12 | !default.mode2v3 13 | *.perspectivev3 14 | !default.perspectivev3 15 | xcuserdata/ 16 | *.xccheckout 17 | *.xcscmblueprint 18 | 19 | # SwiftPM 20 | .build/ 21 | Package.resolved 22 | 23 | # Cocoapods 24 | Pods/ 25 | Podfile.lock 26 | 27 | # Carthage 28 | Carthage/Build/ 29 | 30 | # Fastlane 31 | fastlane/report.xml 32 | fastlane/Preview.html 33 | fastlane/screenshots 34 | fastlane/test_output 35 | 36 | # Archives 37 | *.xcarchive 38 | 39 | # Xcode Server 40 | integrationLogs/ 41 | xcodebots/ 42 | 43 | # Playground 44 | timeline.xctimeline 45 | playground.xcworkspace 46 | 47 | # SwiftPM Xcode project 48 | *.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/ 49 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Services/Grader.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Grader.swift 3 | // SwiftExams 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import Foundation 9 | import FoundationModels 10 | 11 | struct Grader { 12 | 13 | static func grade(examKey: Exam.PartiallyGenerated, studentSubmission: [GenerationID: GenerationID]) -> Int { 14 | var score = 0 15 | 16 | guard let questions = examKey.questions else { 17 | return 0 18 | } 19 | 20 | for question in questions { 21 | // Safely unwrap choices and find the correct one 22 | guard let choices = question.choices, 23 | let correctChoice = choices.first(where: { $0.isCorrect == true }) else { 24 | continue 25 | } 26 | 27 | if studentSubmission[question.id] == correctChoice.id { 28 | score += question.point ?? 0 29 | } 30 | } 31 | 32 | return score 33 | } 34 | } 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Models/SkillLevel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SkillLevel.swift 3 | // SwiftExams 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | 11 | enum SkillLevel: CaseIterable, Identifiable { 12 | case beginner 13 | case intermediate 14 | case advanced 15 | 16 | var id: Self { self } 17 | 18 | var title: String { 19 | switch self { 20 | case .beginner: return "Beginner" 21 | case .intermediate: return "Intermediate" 22 | case .advanced: return "Advanced" 23 | } 24 | } 25 | 26 | var iconName: String { 27 | switch self { 28 | case .beginner: return "tortoise.fill" 29 | case .intermediate: return "bolt.fill" 30 | case .advanced: return "flame.fill" 31 | } 32 | } 33 | 34 | var color: Color { 35 | switch self { 36 | case .beginner: return .green 37 | case .intermediate: return .yellow 38 | case .advanced: return .red 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Travel/Travel/Views/ItineraryView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IternaryView.swift 3 | // Travel 4 | // 5 | // Created by Mohammad Azam on 6/12/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ItineraryView: View { 11 | 12 | let itinerary: Itinerary.PartiallyGenerated 13 | 14 | var body: some View { 15 | 16 | VStack(alignment: .leading) { 17 | 18 | if let title = itinerary.title { 19 | Text(title) 20 | .font(.title) 21 | } 22 | 23 | if let description = itinerary.description { 24 | Text(description) 25 | .opacity(0.5) 26 | } 27 | 28 | if let days = itinerary.days { 29 | ForEach(days) { day in 30 | DayView(day: day) 31 | }.transition(.blurReplace) 32 | } 33 | }.padding() 34 | .animation(.easeInOut, value: itinerary) 35 | } 36 | } 37 | 38 | #Preview { 39 | ItineraryView(itinerary: Itinerary.preview) 40 | } 41 | -------------------------------------------------------------------------------- /Yummy/Yummy/Tools/RecipeTool.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RecipeTool.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/16/25. 6 | // 7 | 8 | import FoundationModels 9 | 10 | struct RecipeTool: Tool { 11 | 12 | let httpClient: HTTPClient 13 | 14 | var name = "recipeTool" 15 | var description = "Fetches Pakistani rice recipes based on provided ingredients by calling a recipe API." 16 | 17 | @Generable 18 | struct Arguments { 19 | @Guide(description: "A list of ingredients to base the Pakistani rice recipe recommendations on.") 20 | let ingredients: [String] 21 | } 22 | 23 | nonisolated func call(arguments: Arguments) async throws -> ToolOutput { 24 | 25 | print("call function") 26 | 27 | let recipes = try await httpClient.loadRecipes().prefix(3) 28 | let recipeDescriptions = recipes.map { recipe in 29 | "- \(recipe.name): \(recipe.description)" 30 | }.joined(separator: "\n\n") 31 | 32 | return ToolOutput(recipeDescriptions) 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld/Summarizer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Summarizer.swift 3 | // HelloWorld 4 | // 5 | // Created by Mohammad Azam on 6/11/25. 6 | // 7 | 8 | import Foundation 9 | import FoundationModels 10 | import Observation 11 | 12 | @MainActor 13 | @Observable 14 | class Summarizer { 15 | 16 | let session: LanguageModelSession 17 | var summarizedText: String = "" 18 | var isSummarizing: Bool = false 19 | 20 | init() { 21 | session = LanguageModelSession(instructions: "You are a text summarizer. Your job is to summarize the text provided to you in 5 lines or less") 22 | } 23 | 24 | func summarize(text: String) async throws { 25 | 26 | let prompt = "Summarize the following text \n \(text)" 27 | let stream = session.streamResponse(to: prompt) 28 | 29 | print("Summarization begins!") 30 | isSummarizing = true 31 | 32 | for try await partial in stream { 33 | summarizedText = partial 34 | } 35 | 36 | print("Summarization completed!") 37 | isSummarizing = false 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Travel/Travel/DayView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DayView.swift 3 | // Travel 4 | // 5 | // Created by Mohammad Azam on 6/12/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct DayView: View { 11 | 12 | let day: DayPlan.PartiallyGenerated 13 | 14 | var body: some View { 15 | VStack(alignment: .leading) { 16 | if let day = day.day { 17 | Text("Day \(day)") 18 | .padding(6) 19 | .background(.green) 20 | .foregroundStyle(.white) 21 | .clipShape(RoundedRectangle(cornerRadius: 10.0, style: .continuous)) 22 | .frame(maxWidth: .infinity, alignment: .leading) 23 | } 24 | 25 | if let plan = day.plan { 26 | Text(plan) 27 | } 28 | 29 | if let activities = day.activities { 30 | ForEach(activities) { activity in 31 | ActivityView(activity: activity) 32 | .transition(.blurReplace) 33 | } 34 | } 35 | } 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /Yummy/Yummy/Screens/FavoriteRecipeListScreen.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShowFavoritesScreen.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/16/25. 6 | // 7 | 8 | import SwiftUI 9 | import SwiftData 10 | 11 | struct FavoriteRecipeListScreen: View { 12 | 13 | @Query private var recipeModels: [RecipeModel] 14 | 15 | var body: some View { 16 | 17 | if recipeModels.isEmpty { 18 | ContentUnavailableView("No Favorite Recipes", 19 | systemImage: "heart.slash", 20 | description: Text("You haven't added any recipes to your favorites yet.")) 21 | } else { 22 | List(recipeModels) { recipeModel in 23 | VStack(alignment: .leading) { 24 | Text(recipeModel.name) 25 | .font(.headline) 26 | Text(recipeModel.desc) 27 | } 28 | }.navigationTitle("Favorite Recipes") 29 | } 30 | } 31 | } 32 | 33 | #Preview { 34 | FavoriteRecipeListScreen() 35 | .modelContainer(previewContainer) 36 | } 37 | -------------------------------------------------------------------------------- /Travel/Travel/ActivityView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | import FoundationModels 3 | 4 | struct ActivityView: View { 5 | 6 | let activity: Activity.PartiallyGenerated 7 | 8 | var body: some View { 9 | VStack(alignment: .leading, spacing: 8) { 10 | 11 | if let title = activity.title { 12 | Text(title) 13 | .font(.headline) 14 | 15 | } 16 | 17 | if let activityType = activity.type { 18 | Text(activityType.rawValue.capitalized) 19 | .font(.subheadline) 20 | .foregroundColor(.secondary) 21 | 22 | } 23 | 24 | if let description = activity.description { 25 | Text(description) 26 | .font(.body) 27 | 28 | } 29 | } 30 | .frame(width: 300) 31 | .padding() 32 | .background(.ultraThinMaterial) 33 | .cornerRadius(12) 34 | .shadow(radius: 4) 35 | } 36 | } 37 | 38 | #Preview { 39 | ActivityView(activity: Activity.preview) 40 | } 41 | 42 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Generators/ExamGenerator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ExamQuestionGenerator.swift 3 | // SwiftExams 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import FoundationModels 9 | import Observation 10 | 11 | @Observable 12 | @MainActor 13 | class ExamGenerator { 14 | 15 | var exam: Exam.PartiallyGenerated? 16 | var session: LanguageModelSession 17 | 18 | init() { 19 | self.session = LanguageModelSession() { 20 | """ 21 | You are responsible for creating an exam. Each exam will consist of questions. Each question will have 4 choices, where one of them will be correct. 22 | """ 23 | 24 | "Here is an example of sample exam:" 25 | 26 | Exam.sampleExam 27 | } 28 | } 29 | 30 | func generate(skillLevel: SkillLevel) async throws { 31 | 32 | let prompt = "Create a \(skillLevel.title.lowercased())-level Swift programming exam" 33 | 34 | let stream = session.streamResponse(to: prompt, generating: Exam.self) 35 | 36 | for try await partialResponse in stream { 37 | exam = partialResponse 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Views/ScoreOverlayView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScoreOverlayView.swift 3 | // SwiftExams 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ScoreOverlayView: View { 11 | let score: Int 12 | let onClose: () -> Void 13 | 14 | var body: some View { 15 | VStack(spacing: 16) { 16 | Text("🎉 Exam Complete") 17 | .font(.title.bold()) 18 | 19 | Text("Your Score: \(score)") 20 | .font(.title2) 21 | .padding(.bottom, 12) 22 | 23 | Button("Close") { 24 | onClose() 25 | } 26 | .padding(.horizontal, 20) 27 | .padding(.vertical, 10) 28 | .background(Color.blue) 29 | .foregroundColor(.white) 30 | .clipShape(RoundedRectangle(cornerRadius: 12)) 31 | } 32 | .padding() 33 | .frame(maxWidth: .infinity) 34 | .background(.ultraThinMaterial) 35 | .cornerRadius(16) 36 | .shadow(radius: 10) 37 | .padding(32) 38 | } 39 | } 40 | 41 | #Preview { 42 | 43 | ScoreOverlayView(score: 85) { 44 | // Preview close handler — no action needed} 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Screens/SkillListScreen.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SkillListScreen.swift 3 | // SwiftExams 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | 11 | struct SkillListScreen: View { 12 | var body: some View { 13 | NavigationView { 14 | List(SkillLevel.allCases) { level in 15 | 16 | NavigationLink { 17 | ExamScreen(skillLevel: level) 18 | } label: { 19 | HStack(spacing: 16) { 20 | Image(systemName: level.iconName) 21 | .foregroundColor(level.color) 22 | .font(.system(size: 24)) 23 | .frame(width: 32, height: 32) 24 | 25 | Text(level.title) 26 | .font(.headline) 27 | .foregroundColor(.primary) 28 | } 29 | } 30 | .padding(.vertical, 8) 31 | } 32 | .listStyle(.insetGrouped) 33 | .navigationTitle("Swift Skill Levels") 34 | } 35 | } 36 | } 37 | 38 | #Preview { 39 | NavigationStack { 40 | SkillListScreen() 41 | } 42 | } 43 | 44 | -------------------------------------------------------------------------------- /Yummy/Yummy/Models/Generables/Recipe.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Recipe.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/14/25. 6 | // 7 | 8 | import Foundation 9 | import FoundationModels 10 | 11 | @Generable 12 | struct Recipe: Equatable { 13 | 14 | @Guide(description: "The title of the recipe, such as 'Spicy Garlic Chicken' or 'Creamy Mushroom Pasta'.") 15 | let name: String 16 | 17 | @Guide(description: "A short description of the recipe, including flavor, main ingredients, or how it’s typically served.") 18 | let description: String 19 | } 20 | 21 | @Generable 22 | struct RecipeStep { 23 | 24 | @Guide(description: "The step number in the recipe, starting from 1 and increasing sequentially.") 25 | let order: Int 26 | 27 | @Guide(description: "A clear instruction for this step, describing what needs to be done.") 28 | let instruction: String 29 | } 30 | 31 | 32 | extension Recipe: InstructionsRepresentable { 33 | 34 | static var sample: Recipe { 35 | 36 | .init( 37 | name: "Garlic Tomato Chicken with Spinach", 38 | description: "A savory dish featuring tender chicken cooked in a rich garlic-tomato sauce, served with wilted spinach for a wholesome and flavorful meal." 39 | ) 40 | } 41 | } 42 | 43 | 44 | -------------------------------------------------------------------------------- /Travel/Travel/ParkDetailScreen.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ParkDetailScreen.swift 3 | // Travel 4 | // 5 | // Created by Mohammad Azam on 6/11/25. 6 | // 7 | 8 | import SwiftUI 9 | import FoundationModels 10 | 11 | struct ParkDetailScreen: View { 12 | 13 | let park: Park 14 | private let model = SystemLanguageModel.default 15 | 16 | var body: some View { 17 | 18 | ScrollView { 19 | switch model.availability { 20 | case .available: 21 | TripPlanningView(park: park) 22 | case .unavailable(.appleIntelligenceNotEnabled): 23 | Text("Travel app is not available because Apple Intelligence has not been turned on.") 24 | case .unavailable(.modelNotReady): 25 | Text("Travel app is not ready yet.") 26 | case .unavailable(.deviceNotEligible): 27 | Text("Your device is not eligible.") 28 | default: 29 | Text(park.description) 30 | } 31 | } 32 | .padding() 33 | .navigationTitle(park.name) 34 | } 35 | } 36 | 37 | #Preview { 38 | NavigationStack { 39 | ParkDetailScreen( 40 | park: Park( 41 | name: "Rocky Mountains", 42 | description: "Set in Colorado, this park features majestic mountain peaks, alpine lakes, and a wide range of wildlife in the heart of the Rockies.", 43 | latitude: 40.3428, 44 | longitude: -105.6836 45 | ) 46 | ) 47 | 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Travel/Travel/ParkListScreen.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // Travel 4 | // 5 | // Created by Mohammad Azam on 6/11/25. 6 | // 7 | 8 | 9 | import SwiftUI 10 | import FoundationModels 11 | 12 | struct ParkListScreen: View { 13 | 14 | @State private var parks: [Park] = [] 15 | 16 | private func loadParks() { 17 | 18 | guard let url = Bundle.main.url(forResource: "parks", withExtension: "json") else { 19 | print("❌ parks.json not found") 20 | return 21 | } 22 | 23 | do { 24 | let data = try Data(contentsOf: url) 25 | let decodedParks = try JSONDecoder().decode([Park].self, from: data) 26 | self.parks = decodedParks 27 | print("✅ Loaded \(parks.count) parks") 28 | } catch { 29 | print("❌ Failed to load parks: \(error)") 30 | } 31 | } 32 | 33 | var body: some View { 34 | List(parks) { park in 35 | NavigationLink { 36 | ParkDetailScreen(park: park) 37 | } label: { 38 | VStack(alignment: .leading, spacing: 10) { 39 | Text(park.name) 40 | .font(.headline) 41 | Text(park.description) 42 | } 43 | } 44 | } 45 | .navigationTitle("Parks") 46 | .listStyle(.plain) 47 | .task { 48 | loadParks() 49 | } 50 | } 51 | } 52 | 53 | #Preview { 54 | NavigationStack { 55 | ParkListScreen() 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Yummy/Yummy/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/14/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContentView: View { 11 | 12 | @State private var selectedIngredients: Set = [] 13 | @State private var showPresentRecipe: Bool = false 14 | @State private var navigateToIngredients: Set? = nil 15 | @State private var showFavorites: Bool = false 16 | 17 | var body: some View { 18 | VStack { 19 | IngredientSelectorView(selectedIngredients: $selectedIngredients) 20 | 21 | HStack { 22 | Button("Clear") { 23 | selectedIngredients = [] 24 | }.buttonStyle(.bordered) 25 | Button("Suggest Recipes") { 26 | navigateToIngredients = selectedIngredients 27 | }.buttonStyle(.borderedProminent) 28 | } 29 | } 30 | .toolbar(content: { 31 | ToolbarItem(placement: .topBarTrailing) { 32 | Button("View Favorites") { 33 | showFavorites = true 34 | } 35 | } 36 | }) 37 | .navigationDestination(item: $navigateToIngredients) { ingredients in 38 | RecipeListScreen(ingredients: ingredients) 39 | } 40 | .sheet(isPresented: $showFavorites) { 41 | NavigationStack { 42 | FavoriteRecipeListScreen() 43 | } 44 | } 45 | } 46 | } 47 | 48 | #Preview { 49 | NavigationStack { 50 | ContentView() 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Travel/Travel/Views/TripPlanningView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TripPlanningView.swift 3 | // Travel 4 | // 5 | // Created by Mohammad Azam on 6/12/25. 6 | // 7 | 8 | import SwiftUI 9 | import FoundationModels 10 | 11 | struct TripPlanningView: View { 12 | 13 | let park: Park 14 | @State private var generatingItinerary: Bool = false 15 | 16 | @State private var itineraryPlanner: ItineraryPlanner? 17 | 18 | var body: some View { 19 | VStack { 20 | Button(generatingItinerary ? "Generating Iternary...": "Generate Iternary") { 21 | generatingItinerary = true 22 | Task { 23 | do { 24 | try await itineraryPlanner?.suggestItinerary() 25 | generatingItinerary = false 26 | } catch { 27 | print(error.localizedDescription) 28 | generatingItinerary = false 29 | } 30 | } 31 | } 32 | .buttonStyle(.bordered) 33 | .glassEffect() 34 | .disabled(itineraryPlanner?.session.isResponding ?? true) 35 | 36 | 37 | if let iternary = itineraryPlanner?.itinerary { 38 | ItineraryView(itinerary: iternary) 39 | } 40 | }.task { 41 | itineraryPlanner = ItineraryPlanner(park: park) 42 | } 43 | } 44 | } 45 | 46 | #Preview { 47 | TripPlanningView( 48 | park: Park( 49 | name: "Rocky Mountain National Park", 50 | description: "Set in Colorado, this park features majestic mountain peaks, alpine lakes, and a wide range of wildlife in the heart of the Rockies.", 51 | latitude: 40.3428, 52 | longitude: -105.6836 53 | ) 54 | ) 55 | 56 | } 57 | -------------------------------------------------------------------------------- /Travel/Travel/Planners/IternaryPlanner.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IternaryPlanner.swift 3 | // Travel 4 | // 5 | // Created by Mohammad Azam on 6/12/25. 6 | // 7 | 8 | import Foundation 9 | import Observation 10 | import FoundationModels 11 | 12 | @MainActor 13 | @Observable 14 | final class ItineraryPlanner { 15 | 16 | private(set) var itinerary: Itinerary.PartiallyGenerated? 17 | var session: LanguageModelSession 18 | let park: Park 19 | 20 | init(park: Park) { 21 | self.park = park 22 | let pointOfInterestsTool = FindNearbyPointsOfInterestTool(park: park) 23 | self.session = LanguageModelSession(tools: [pointOfInterestsTool]) { 24 | "You are a helpful travel assistant. Your task is to create personalized and informative travel itineraries based on the user's preferences and inputs. Provide clear, concise, and friendly suggestions." 25 | 26 | """ 27 | Use the findNearbyPointsOfInterest tool to find various 28 | businesses and activities near \(park.name). 29 | """ 30 | 31 | """ 32 | Here is a description for \(park.name) for your reference: 33 | """ 34 | park.description 35 | 36 | "Here is an example of itinerary:" 37 | Itinerary.exampleTripToNationalPark 38 | } 39 | 40 | } 41 | 42 | func suggestItinerary() async throws { 43 | 44 | let prompt = "Create a 3-day travel itinerary for \(park.name), including daily activities, suggested times, and brief descriptions of each stop. Make it engaging and suitable for first-time visitors." 45 | 46 | let stream = session.streamResponse(to: prompt, generating: Itinerary.self) 47 | 48 | for try await partial in stream { 49 | self.itinerary = partial 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Yummy/Yummy/Views/IngredientSelectorView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | struct IngredientSelectorView: View { 4 | let ingredients: [Ingredient] = [ 5 | .init(name: "Tomato"), 6 | .init(name: "Chicken"), 7 | .init(name: "Garlic"), 8 | .init(name: "Spinach"), 9 | .init(name: "Rice"), 10 | .init(name: "Cheese"), 11 | .init(name: "Beef"), 12 | .init(name: "Onion"), 13 | .init(name: "Broccoli") 14 | ] 15 | 16 | @Binding var selectedIngredients: Set 17 | 18 | var body: some View { 19 | NavigationView { 20 | VStack { 21 | List(ingredients) { ingredient in 22 | HStack { 23 | Text(ingredient.name) 24 | Spacer() 25 | if selectedIngredients.contains(ingredient) { 26 | Image(systemName: "checkmark.circle.fill") 27 | .foregroundColor(.green) 28 | } 29 | } 30 | .contentShape(Rectangle()) 31 | .onTapGesture { 32 | toggleSelection(of: ingredient) 33 | } 34 | } 35 | 36 | Text("Selected: \(selectedIngredients.map { $0.name }.joined(separator: ", "))") 37 | .font(.footnote) 38 | .padding() 39 | .multilineTextAlignment(.center) 40 | } 41 | .navigationTitle("Select Ingredients") 42 | } 43 | } 44 | 45 | private func toggleSelection(of ingredient: Ingredient) { 46 | if selectedIngredients.contains(ingredient) { 47 | selectedIngredients.remove(ingredient) 48 | } else { 49 | selectedIngredients.insert(ingredient) 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Yummy/Yummy/Screens/RecipeDetailScreen.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RecipeDetailScreen.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import SwiftUI 9 | import FoundationModels 10 | 11 | struct RecipeDetailScreen: View { 12 | 13 | @Environment(RecipeRecommender.self) private var recipeRecommender 14 | let recipe: Recipe.PartiallyGenerated 15 | 16 | private func loadRecipeSteps() async { 17 | do { 18 | 19 | guard let recipeName = recipe.name else { return } 20 | 21 | try await recipeRecommender.createRecipeSteps(recipeName: recipeName) 22 | } catch { 23 | print(error.localizedDescription) 24 | } 25 | } 26 | 27 | var body: some View { 28 | 29 | Group { 30 | if recipeRecommender.recipeSteps.isEmpty { 31 | ProgressView("Just a few more seconds...") 32 | } else { 33 | List(recipeRecommender.recipeSteps) { step in 34 | HStack { 35 | if let order = step.order { 36 | Text("\(order)") 37 | .padding() 38 | .foregroundStyle(.white) 39 | .background(.blue) 40 | .clipShape(Circle()) 41 | } 42 | if let instruction = step.instruction { 43 | Text(instruction) 44 | } 45 | } 46 | } 47 | } 48 | }.task { 49 | await loadRecipeSteps() 50 | } 51 | .navigationTitle(recipe.name ?? "") 52 | } 53 | } 54 | 55 | #Preview { 56 | NavigationStack { 57 | RecipeDetailScreen(recipe: Recipe.sample.asPartiallyGenerated()) 58 | }.environment(RecipeRecommender(httpClient: HTTPClient())) 59 | } 60 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // HelloWorld 4 | // 5 | // Created by Mohammad Azam on 6/9/25. 6 | // 7 | 8 | import Playgrounds 9 | import SwiftUI 10 | import FoundationModels 11 | 12 | struct ContentView: View { 13 | 14 | @State private var transcript: String = "" 15 | @Environment(Summarizer.self) private var summarizer 16 | 17 | private func loadTranscript() -> String { 18 | guard let url = Bundle.main.url(forResource: "transcript", withExtension: "txt") else { 19 | print("Transcript file not found.") 20 | return "" 21 | } 22 | 23 | do { 24 | let contents = try String(contentsOf: url, encoding: .utf8) 25 | return contents 26 | } catch { 27 | print("Failed to load transcript: \(error)") 28 | return "" 29 | } 30 | } 31 | 32 | var body: some View { 33 | VStack { 34 | ScrollView { 35 | if summarizer.summarizedText.isEmpty { 36 | Text(transcript) 37 | } else { 38 | Text(summarizer.summarizedText) 39 | } 40 | } 41 | 42 | Button { 43 | Task { try await summarizer.summarize(text: transcript) } 44 | } label: { 45 | HStack { 46 | if summarizer.isSummarizing { 47 | ProgressView() 48 | } 49 | Text(summarizer.isSummarizing ? "Summarizing...": "Summarize Text") 50 | } 51 | }.buttonStyle(.bordered) 52 | .glassEffect() 53 | .disabled(summarizer.isSummarizing) 54 | } 55 | 56 | .padding() 57 | .onAppear(perform: { 58 | transcript = loadTranscript() 59 | }) 60 | .padding() 61 | } 62 | } 63 | 64 | #Preview { 65 | NavigationStack { 66 | ContentView() 67 | } 68 | .environment(Summarizer()) 69 | 70 | } 71 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Views/QuestionView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // QuestionView.swift 3 | // SwiftExams 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import SwiftUI 9 | import FoundationModels 10 | 11 | struct QuestionView: View { 12 | 13 | let index: Int 14 | let question: Question.PartiallyGenerated 15 | let selectedChoiceId: GenerationID 16 | let onSelectChoice: (GenerationID) -> Void 17 | 18 | var body: some View { 19 | VStack { 20 | if let questionText = question.text { 21 | HStack(alignment: .top, spacing: 12) { 22 | Text("\(index + 1)") 23 | .font(.subheadline.bold()) 24 | .foregroundColor(.white) 25 | .frame(width: 28, height: 28) 26 | .background(Color.blue) 27 | .clipShape(Circle()) 28 | 29 | Text(questionText) 30 | .font(.body) 31 | .foregroundColor(.primary) 32 | } 33 | .padding(.vertical, 4) 34 | } 35 | 36 | if let choices = question.choices { 37 | ForEach(choices) { choice in 38 | HStack { 39 | Image(systemName: selectedChoiceId == choice.id ? "largecircle.fill.circle" : "circle") 40 | .foregroundColor(.blue) 41 | if let choiceText = choice.text { 42 | Text(choiceText) 43 | } 44 | Spacer() 45 | } 46 | .contentShape(Rectangle()) 47 | .onTapGesture { 48 | onSelectChoice(choice.id) 49 | } 50 | } 51 | } 52 | 53 | } 54 | } 55 | } 56 | 57 | #Preview { 58 | QuestionView(index: 1, question: Question(text: "What is 2+2?", point: 10, choices: []).asPartiallyGenerated(), selectedChoiceId: .init(), onSelectChoice: { _ in }) 59 | } 60 | -------------------------------------------------------------------------------- /Travel/Travel/Tools/NearbyPointsOfInterestTool.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NearbyPointsOfInterestTool.swift 3 | // Travel 4 | // 5 | // Created by Mohammad Azam on 6/13/25. 6 | // 7 | 8 | import Foundation 9 | import FoundationModels 10 | import MapKit 11 | 12 | 13 | struct FindNearbyPointsOfInterestTool: Tool { 14 | 15 | let park: Park 16 | 17 | var name: String = "findNearbyPointsOfInterest" 18 | var description: String = "Find points of interest near a national park." 19 | 20 | @Generable 21 | enum Category: String, CaseIterable { 22 | case hotel 23 | case restaurant 24 | case trail 25 | case campground 26 | case visitorCenter 27 | case viewpoint 28 | case picnicArea 29 | case museum 30 | case parking 31 | case rangerStation 32 | 33 | func toMapKitCategory() -> [MKPointOfInterestCategory] { 34 | 35 | Category.allCases.map { 36 | MKPointOfInterestCategory(rawValue: $0.rawValue) 37 | } 38 | 39 | 40 | } 41 | } 42 | 43 | @Generable 44 | struct Arguments { 45 | 46 | @Guide(description: "This is the type of destination to look for.") 47 | let pointOfInterestCategory: Category 48 | 49 | @Guide(description: "The natural language query of what to search for.") 50 | let naturalLanguageQuery: String 51 | } 52 | 53 | func call(arguments: Arguments) async throws -> ToolOutput { 54 | 55 | let items = try await findPointOfInterests(location: park.location, arguments: arguments) 56 | let results = items.prefix(10).compactMap { $0.name } 57 | print(results) 58 | return ToolOutput("There are these \(arguments.pointOfInterestCategory) near \(park.name): \(results.formatted())") 59 | } 60 | 61 | private func findPointOfInterests(location: CLLocationCoordinate2D, arguments: Arguments) async throws -> [MKMapItem] { 62 | let request = MKLocalSearch.Request() 63 | request.naturalLanguageQuery = arguments.naturalLanguageQuery 64 | request.region = MKCoordinateRegion(center: location, latitudinalMeters: 20_000, longitudinalMeters: 20_000) 65 | request.pointOfInterestFilter = .init(including: arguments.pointOfInterestCategory.toMapKitCategory()) 66 | let search = MKLocalSearch(request: request) 67 | let response = try await search.start() 68 | return response.mapItems 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /Yummy/Yummy/Services/RecipeRecommender.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RecipeRecommender.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/14/25. 6 | // 7 | 8 | import Foundation 9 | import Observation 10 | import FoundationModels 11 | 12 | @MainActor 13 | @Observable 14 | class RecipeRecommender { 15 | 16 | var recipes: [Recipe.PartiallyGenerated] = [] 17 | var recipeSteps: [RecipeStep.PartiallyGenerated] = [] 18 | let session: LanguageModelSession 19 | let httpClient: HTTPClient 20 | 21 | var isResponding: Bool { 22 | session.isResponding 23 | } 24 | 25 | init(httpClient: HTTPClient) { 26 | self.httpClient = httpClient 27 | 28 | let recipeTool = RecipeTool(httpClient: httpClient) 29 | 30 | self.session = LanguageModelSession(tools: [recipeTool]) { 31 | """ 32 | You are a helpful recipe assistant that creates delicious and easy-to-follow recipes based on the provided ingredients. 33 | """ 34 | """ 35 | When the ingredients include rice, you must always use recipeTool to fetch rice recipes. Here is an example of ingredients with rice: 36 | """ 37 | [Ingredient(name: "Rice")] 38 | [Ingredient(name: "Rice"), Ingredient(name: "Onion")] 39 | [Ingredient(name: "Rice"), Ingredient(name: "Chicken")] 40 | 41 | """ 42 | If rice is not one of the ingredients, you should generate the recipes yourself. 43 | """ 44 | } 45 | 46 | 47 | // warm the session 48 | session.prewarm() 49 | } 50 | 51 | func createRecipeSteps(recipeName: String) async throws { 52 | 53 | recipeSteps = [] 54 | 55 | let prompt = "List all steps to create recipe: \(recipeName)" 56 | 57 | let stream = session.streamResponse(to: prompt, generating: [RecipeStep].self) 58 | for try await partialResponse in stream { 59 | recipeSteps = partialResponse 60 | } 61 | } 62 | 63 | func suggestRecipes(ingredients: Set) async throws { 64 | 65 | recipes = [] 66 | 67 | let prompt = "Suggest 3-5 recipes based on the following ingredient(s): \n \(ingredients.map(\.name).joined(separator: ", "))" 68 | 69 | let stream = session.streamResponse(to: prompt, generating: [Recipe].self) 70 | for try await partialResponse in stream { 71 | recipes = partialResponse 72 | } 73 | 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /Yummy/Yummy/Screens/RecipeListScreen.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RecipeView.swift 3 | // Yummy 4 | // 5 | // Created by Mohammad Azam on 6/14/25. 6 | // 7 | 8 | import SwiftUI 9 | import FoundationModels 10 | import SwiftData 11 | 12 | struct RecipeListScreen: View { 13 | 14 | let ingredients: Set 15 | @Environment(RecipeRecommender.self) private var recipeRecommender 16 | @Environment(\.modelContext) private var modelContext 17 | @Environment(\.httpClient) private var httpClient 18 | 19 | private func saveRecipeAsFavorite(recipeModel: RecipeModel) { 20 | 21 | print(recipeModel.name) 22 | print(recipeModel.desc) 23 | 24 | // save the recipe Model 25 | modelContext.insert(recipeModel) 26 | } 27 | 28 | var body: some View { 29 | 30 | let recipes = recipeRecommender.recipes 31 | 32 | Group { 33 | 34 | if !recipes.isEmpty { 35 | List(recipes) { recipe in 36 | NavigationLink { 37 | RecipeDetailScreen(recipe: recipe) 38 | } label: { 39 | RecipeCellView(recipe: recipe, onSaveAsFavorite: saveRecipeAsFavorite) 40 | } 41 | } 42 | } else { 43 | ProgressView("Preparing delicious recipes") 44 | } 45 | 46 | }.task { 47 | do { 48 | 49 | try await recipeRecommender.suggestRecipes(ingredients: ingredients) 50 | } catch { 51 | print(error) 52 | } 53 | } 54 | } 55 | } 56 | 57 | struct RecipeCellView: View { 58 | 59 | let recipe: Recipe.PartiallyGenerated 60 | let onSaveAsFavorite: (RecipeModel) -> Void 61 | 62 | var body: some View { 63 | VStack(alignment: .leading) { 64 | if let name = recipe.name { 65 | Text(name) 66 | .font(.headline) 67 | .contentTransition(.opacity) 68 | } 69 | 70 | if let description = recipe.description { 71 | Text(description) 72 | } 73 | 74 | Button("Save to favorite") { 75 | 76 | guard let name = recipe.name, 77 | let description = recipe.description else { return } 78 | 79 | // create a SwiftData model 80 | let recipeModel = RecipeModel(name: name, desc: description) 81 | 82 | onSaveAsFavorite(recipeModel) 83 | } 84 | .buttonStyle(.bordered) 85 | } 86 | } 87 | } 88 | 89 | 90 | #Preview { 91 | NavigationStack { 92 | RecipeListScreen(ingredients: Ingredient.preview) 93 | } .modelContainer(previewContainer) 94 | } 95 | -------------------------------------------------------------------------------- /Travel/Travel/parkdetailscreen-bk.txt: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // ParkDetailScreen.swift 4 | // Travel 5 | // 6 | // Created by Mohammad Azam on 6/11/25. 7 | // 8 | 9 | import SwiftUI 10 | import FoundationModels 11 | 12 | struct ParkDetailScreen: View { 13 | 14 | let park: Park 15 | @Environment(ParkStore.self) private var store 16 | @State private var generatingItinerary: Bool = false 17 | private let model = SystemLanguageModel.default 18 | 19 | var body: some View { 20 | 21 | // make sure to only display the Generate Iternary 22 | // button if the model is available 23 | 24 | 25 | ScrollViewReader { proxy in 26 | ScrollView { 27 | Text(park.description) 28 | .listRowSeparator(.hidden) 29 | Button(generatingItinerary ? "Generating Iternary...": "Generate Iternary") { 30 | generatingItinerary = true 31 | Task { 32 | do { 33 | try await store.loadIternary(parkName: park.name) 34 | generatingItinerary = false 35 | } catch { 36 | print(error.localizedDescription) 37 | generatingItinerary = false 38 | } 39 | } 40 | } 41 | .buttonStyle(.bordered) 42 | .glassEffect() 43 | .disabled(generatingItinerary) 44 | 45 | if let iternary = store.iternary, 46 | let days = iternary.days { 47 | 48 | VStack { 49 | ForEach(days) { day in 50 | VStack { 51 | Text("Day \(day.day ?? 0)") 52 | .padding(6) 53 | .background(.green) 54 | .foregroundStyle(.white) 55 | .clipShape(RoundedRectangle(cornerRadius: 10.0, style: .continuous)) 56 | 57 | Text(day.plan ?? "") 58 | }.id(day.id) 59 | } 60 | } 61 | 62 | } 63 | 64 | }.onChange(of: store.iternary?.days) { 65 | if let last = store.iternary?.days?.last { 66 | withAnimation { 67 | proxy.scrollTo(last.id) 68 | } 69 | } 70 | } 71 | } 72 | .listStyle(.plain) 73 | .padding() 74 | .navigationTitle(park.name) 75 | } 76 | } 77 | 78 | #Preview { 79 | NavigationStack { 80 | ParkDetailScreen(park: Park(name: "Rocky Mountains", description: "Set in Colorado, this park features majestic mountain peaks, alpine lakes, and a wide range of wildlife in the heart of the Rockies.")) 81 | }.environment(ParkStore()) 82 | } 83 | -------------------------------------------------------------------------------- /Travel/Travel/Resources/parks.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Yellowstone National Park", 4 | "description": "Established in 1872, Yellowstone is the first national park in the U.S. and is known for its geothermal features like Old Faithful, diverse wildlife, and stunning natural landscapes.", 5 | "latitude": 44.4280, 6 | "longitude": -110.5885 7 | }, 8 | { 9 | "name": "Yosemite National Park", 10 | "description": "Located in California’s Sierra Nevada mountains, Yosemite is famous for its granite cliffs, waterfalls, giant sequoia groves, and iconic landmarks like El Capitan and Half Dome.", 11 | "latitude": 37.8651, 12 | "longitude": -119.5383 13 | }, 14 | { 15 | "name": "Grand Canyon National Park", 16 | "description": "Situated in Arizona, the Grand Canyon is a massive geological wonder carved by the Colorado River, known for its breathtaking vistas and layered red rock formations.", 17 | "latitude": 36.1069, 18 | "longitude": -112.1129 19 | }, 20 | { 21 | "name": "Zion National Park", 22 | "description": "Located in Utah, Zion features dramatic red cliffs, canyons, and scenic hikes like Angels Landing and The Narrows through the Virgin River.", 23 | "latitude": 37.2982, 24 | "longitude": -113.0263 25 | }, 26 | { 27 | "name": "Acadia National Park", 28 | "description": "Found on Maine’s Mount Desert Island, Acadia offers rugged coastal beauty, granite peaks, and forested hiking trails along the Atlantic Ocean.", 29 | "latitude": 44.3386, 30 | "longitude": -68.2733 31 | }, 32 | { 33 | "name": "Glacier National Park", 34 | "description": "Located in Montana, Glacier is known for its pristine forests, alpine meadows, rugged mountains, and hundreds of glaciers and lakes.", 35 | "latitude": 48.7596, 36 | "longitude": -113.7870 37 | }, 38 | { 39 | "name": "Rocky Mountain National Park", 40 | "description": "Set in Colorado, this park features majestic mountain peaks, alpine lakes, and a wide range of wildlife in the heart of the Rockies.", 41 | "latitude": 40.3428, 42 | "longitude": -105.6836 43 | }, 44 | { 45 | "name": "Everglades National Park", 46 | "description": "Located in southern Florida, Everglades is a vast network of wetlands and mangroves that’s home to manatees, alligators, and panthers.", 47 | "latitude": 25.2866, 48 | "longitude": -80.8987 49 | }, 50 | { 51 | "name": "Great Smoky Mountains National Park", 52 | "description": "Straddling North Carolina and Tennessee, this park is renowned for its mist-covered mountains, diverse plant and animal life, and historic buildings.", 53 | "latitude": 35.6532, 54 | "longitude": -83.5070 55 | }, 56 | { 57 | "name": "Arches National Park", 58 | "description": "Located in Utah, Arches is home to more than 2,000 natural sandstone arches, as well as unique rock formations and desert scenery.", 59 | "latitude": 38.7331, 60 | "longitude": -109.5925 61 | } 62 | ] 63 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Screens/ExamScreen.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ExamScreen.swift 3 | // SwiftExams 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import SwiftUI 9 | import FoundationModels 10 | 11 | struct ExamScreen: View { 12 | 13 | let skillLevel: SkillLevel 14 | @State private var examGenerator: ExamGenerator? 15 | @State private var selectedChoices: [GenerationID: GenerationID] = [: ] 16 | @State private var score: Int? 17 | 18 | private func generateExamQuestions() async { 19 | do { 20 | examGenerator = ExamGenerator() 21 | try await examGenerator?.generate(skillLevel: skillLevel) 22 | } catch { 23 | print(error.localizedDescription) 24 | } 25 | } 26 | 27 | private func isUserChoice(questionId: GenerationID, choiceId: GenerationID) -> Bool { 28 | 29 | 30 | 31 | false 32 | } 33 | 34 | var body: some View { 35 | 36 | let exam = examGenerator?.exam 37 | 38 | Group { 39 | if let exam { 40 | List { 41 | if let name = exam.name, 42 | let description = exam.description 43 | { 44 | Text(name) 45 | .font(.title) 46 | 47 | Text(description) 48 | } 49 | 50 | ForEach(Array((exam.questions ?? []).enumerated()), id: \.element.id) { index, question in 51 | 52 | QuestionView(index: index, question: question, selectedChoiceId: selectedChoices[question.id] ?? .init(), onSelectChoice: { selectedChoiceId in 53 | 54 | selectedChoices[question.id] = selectedChoiceId 55 | print(selectedChoices) 56 | }) 57 | 58 | } 59 | 60 | } 61 | } else { 62 | ProgressView("Please wait...") 63 | } 64 | } 65 | .overlay { 66 | if let score { 67 | ScoreOverlayView(score: score) { 68 | self.score = nil 69 | } 70 | } 71 | } 72 | .toolbar(content: { 73 | ToolbarItem(placement: .topBarTrailing) { 74 | 75 | let questionCount = exam?.questions?.count ?? 0 76 | 77 | Button("Submit") { 78 | 79 | if let exam { 80 | score = Grader.grade(examKey: exam, studentSubmission: selectedChoices) 81 | } 82 | } 83 | .disabled(selectedChoices.count != questionCount) 84 | } 85 | }) 86 | .task { 87 | await generateExamQuestions() 88 | } 89 | } 90 | } 91 | 92 | #Preview { 93 | NavigationStack { 94 | ExamScreen(skillLevel: .beginner) 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams/Generators/Exam.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Question.swift 3 | // SwiftExams 4 | // 5 | // Created by Mohammad Azam on 6/22/25. 6 | // 7 | 8 | import Foundation 9 | import FoundationModels 10 | 11 | @Generable 12 | struct Exam { 13 | 14 | @Guide(description: "The title of the exam.") 15 | let name: String 16 | 17 | @Guide(description: "A short description of what this exam covers.") 18 | let description: String 19 | 20 | @Guide(description: "A list of questions included in the exam.", .count(3)) 21 | let questions: [Question] 22 | } 23 | 24 | @Generable 25 | struct Question { 26 | 27 | let questionId: UUID = UUID() 28 | 29 | @Guide(description: "The text for the exam question.") 30 | let text: String 31 | 32 | @Guide(description: "The number of points this question is worth. Make sure it is 10.") 33 | let point: Int 34 | 35 | @Guide(description: "The answer choices for this question. One of them must be marked as correct.", .count(4)) 36 | let choices: [Choice] 37 | } 38 | 39 | @Generable 40 | struct Choice { 41 | 42 | // This property will NOT be part of partially generated type 43 | // The reason is that it has been initialized. 44 | let choiceId = UUID() 45 | 46 | @Guide(description: "The text displayed for this answer choice.") 47 | let text: String 48 | 49 | @Guide(description: "Indicates whether this choice is the correct answer.") 50 | let isCorrect: Bool 51 | 52 | } 53 | 54 | 55 | extension Exam { 56 | 57 | static let sampleExam = Exam( 58 | name: "Swift Fundamentals Exam", 59 | description: "A beginner-level exam to test knowledge of Swift basics including variables, optionals, and control flow.", 60 | questions: [ 61 | Question( 62 | text: "Which keyword is used to declare a constant in Swift?", 63 | point: 5, 64 | choices: [ 65 | Choice(text: "var", isCorrect: false), 66 | Choice(text: "let", isCorrect: true), 67 | Choice(text: "const", isCorrect: false), 68 | Choice(text: "define", isCorrect: false) 69 | ] 70 | ), 71 | Question( 72 | text: "What is the default value of an optional if it is not assigned?", 73 | point: 5, 74 | choices: [ 75 | Choice(text: "nil", isCorrect: true), 76 | Choice(text: "0", isCorrect: false), 77 | Choice(text: "undefined", isCorrect: false), 78 | Choice(text: "null", isCorrect: false) 79 | ] 80 | ), 81 | Question( 82 | text: "Which statement is used for conditional branching in Swift?", 83 | point: 5, 84 | choices: [ 85 | Choice(text: "if", isCorrect: true), 86 | Choice(text: "when", isCorrect: false), 87 | Choice(text: "case", isCorrect: false), 88 | Choice(text: "switchif", isCorrect: false) 89 | ] 90 | ) 91 | ] 92 | ) 93 | 94 | 95 | } 96 | -------------------------------------------------------------------------------- /Yummy/Yummy.xcodeproj/xcshareddata/xcschemes/Yummy.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | 16 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 57 | 58 | 59 | 60 | 66 | 68 | 74 | 75 | 76 | 77 | 79 | 80 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /Jokes/Jokes/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // Jokes 4 | // 5 | // Created by Mohammad Azam on 6/13/25. 6 | // 7 | 8 | import SwiftUI 9 | import FoundationModels 10 | import Observation 11 | 12 | struct DadJokesTool: Tool { 13 | 14 | var name: String = "dadJokesTool" 15 | var description: String = "Generate classic dad jokes that are punny, clean, and perfect for lightening the mood. Great for family-friendly humor on any topic." 16 | 17 | @Generable 18 | struct Arguments { 19 | @Guide(description: "A natural language topic or keyword to base the dad joke on, such as 'bicycles', 'pizza', or 'coding'.") 20 | let naturalLanguageQuery: String 21 | } 22 | 23 | func call(arguments: Arguments) async throws -> ToolOutput { 24 | let randomJoke = randomDadJoke() 25 | return ToolOutput(randomJoke) 26 | } 27 | 28 | private func randomDadJoke() -> String { 29 | let jokes = [ 30 | "I'm reading a book on anti-gravity. It's impossible to put down!", 31 | "Why don't skeletons fight each other? They don't have the guts.", 32 | "I only know 25 letters of the alphabet. I don't know y.", 33 | "Did you hear about the restaurant on the moon? Great food, no atmosphere.", 34 | "Why did the scarecrow win an award? Because he was outstanding in his field!" 35 | ] 36 | 37 | return jokes.randomElement() ?? "I'm all out of jokes... for now!" 38 | } 39 | 40 | } 41 | 42 | @Generable 43 | struct Joke { 44 | let text: String 45 | } 46 | 47 | @MainActor 48 | @Observable 49 | class JokeMaker { 50 | 51 | let session: LanguageModelSession 52 | private(set) var joke: Joke.PartiallyGenerated? 53 | let dadJokesTool = DadJokesTool() 54 | 55 | init() { 56 | self.session = LanguageModelSession(tools: [dadJokesTool]) { 57 | """ 58 | You are a professional joke writer. Your task is to generate short, clever, and family-friendly jokes on request. Keep the tone light and playful. 59 | """ 60 | 61 | """ 62 | Use the dadJokesTool to create funny and family friendly dad jokes. 63 | """ 64 | } 65 | } 66 | 67 | func suggestJoke() async throws { 68 | 69 | let prompt = "Tell me a short, clever, and family-friendly joke " 70 | 71 | let stream = session.streamResponse(to: prompt, generating: Joke.self) 72 | 73 | for try await partial in stream { 74 | self.joke = partial 75 | } 76 | } 77 | } 78 | 79 | struct ContentView: View { 80 | 81 | @State private var jokeMaker: JokeMaker? 82 | 83 | var body: some View { 84 | VStack { 85 | 86 | Button("Display a joke") { 87 | Task { 88 | try await jokeMaker?.suggestJoke() 89 | } 90 | }.disabled(jokeMaker?.session.isResponding ?? true) 91 | .buttonStyle(.bordered) 92 | .glassEffect() 93 | 94 | if let joke = jokeMaker?.joke { 95 | if let text = joke.text { 96 | Text(text) 97 | } 98 | } 99 | 100 | } 101 | .padding() 102 | .task { 103 | jokeMaker = JokeMaker() 104 | } 105 | } 106 | } 107 | 108 | #Preview { 109 | ContentView() 110 | } 111 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld/ToastView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ToastView.swift 3 | // Platzi 4 | // 5 | // Created by Mohammad Azam on 6/8/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ShowToastAction { 11 | typealias Action = (ToastType) -> Void 12 | let action: Action 13 | 14 | func callAsFunction(_ type: ToastType) { 15 | action(type) 16 | } 17 | } 18 | 19 | enum ToastType { 20 | case success(String) 21 | case error(String) 22 | case info(String) 23 | 24 | var backgroundColor: Color { 25 | switch self { 26 | case .success: 27 | return Color.green.opacity(1.0) 28 | case .error: 29 | return Color.red.opacity(1.0) 30 | case .info: 31 | return Color.blue.opacity(1.0) 32 | } 33 | } 34 | 35 | var icon: Image { 36 | switch self { 37 | case .success: 38 | return Image(systemName: "checkmark.circle") 39 | case .error: 40 | return Image(systemName: "xmark.octagon") 41 | case .info: 42 | return Image(systemName: "info.circle") 43 | } 44 | } 45 | 46 | var message: String { 47 | switch self { 48 | case .success(let msg), .error(let msg), .info(let msg): 49 | return msg 50 | } 51 | } 52 | 53 | } 54 | 55 | struct ToastView: View { 56 | 57 | let type: ToastType 58 | 59 | var body: some View { 60 | HStack(alignment: .top, spacing: 10) { 61 | type.icon 62 | .foregroundStyle(.white) 63 | Text(type.message) 64 | .foregroundColor(.white) 65 | .font(.subheadline) 66 | .multilineTextAlignment(.leading) 67 | .frame(maxWidth: .infinity, alignment: .leading) 68 | } .padding() 69 | .background(type.backgroundColor) 70 | .cornerRadius(12) 71 | .shadow(radius: 4) 72 | .padding(.horizontal, 16) 73 | 74 | } 75 | } 76 | 77 | struct ToastModifier: ViewModifier { 78 | 79 | @State private var type: ToastType? 80 | @State private var dismissTask: DispatchWorkItem? 81 | 82 | func body(content: Content) -> some View { 83 | content 84 | .environment(\.showToast, ShowToastAction(action: { type in 85 | withAnimation(.easeInOut) { 86 | self.type = type 87 | } 88 | 89 | // cancel previous dismissal task if any 90 | dismissTask?.cancel() 91 | 92 | // schedule a new dismisal 93 | let task = DispatchWorkItem { 94 | withAnimation(.easeInOut) { 95 | self.type = nil 96 | } 97 | } 98 | 99 | self.dismissTask = task 100 | //DispatchQueue.main.asyncAfter(deadline: .now() + 3, execute: task) 101 | 102 | })) 103 | .overlay(alignment: .bottom) { 104 | if let type { 105 | ToastView(type: type) 106 | .transition(.move(edge: .bottom)) 107 | .padding(.top, 50) 108 | } 109 | } 110 | } 111 | } 112 | 113 | #Preview { 114 | ToastView(type: .success("Customer saved.")) 115 | ToastView(type: .error("Operation failed.")) 116 | ToastView(type: .info("Informational message.")) 117 | } 118 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ![Image](/promo.png) 3 | 4 | # 🍎 Apple Foundation Model Framework Examples 5 | 6 | Welcome to the **Apple Foundation Model Framework Examples** project! This repository showcases practical examples, demos, and experiments using Apple’s new Foundation Models Framework introduced at WWDC 2025. 7 | 8 | ## Projects 9 | 10 | ## 🔍 [Transcript Summarizer Using Apple Foundation Models](/HelloWorld/) 11 | 12 | This project uses Apple’s Foundation Models Framework to summarize long transcript text into five concise lines. It leverages on-device machine learning to extract key ideas and present them in a clear, readable format. 13 | 14 | ## 🌲 [National Park Trip Planner](/Travel/) 15 | **National Park Trip Planner** is a SwiftUI-powered app that helps users plan personalized 3-day itineraries for U.S. national parks. With just a tap, the app generates detailed day-by-day activity suggestions tailored to each park—highlighting scenic spots, hiking trails, and must-see landmarks. Whether you're visiting Yosemite or the Everglades, this app offers an easy, engaging way to explore the best each park has to offer. All recommendations are generated on-device using Apple's Foundation Models framework for privacy and speed. 16 | 17 | - If you can fix the animation bugs then please do a pull request. Thanks in advance. 18 | 19 | [View the demo on Twitter/X](https://x.com/azamsharp/status/1933386643291189535) 20 | 21 | ## 😂 [Dad Jokes Generator](/Jokes/) 22 | 23 | Jokes is a SwiftUI app that uses Apple’s Foundation Models Framework to generate and display classic dad jokes. It showcases how to integrate Tool-based AI functionality using LanguageModelSession and @Generable types. The app includes a custom DadJokesTool that returns random puns, demonstrating how to build and register tools that respond to natural language prompts. Ideal for learning how to use tools in the Foundation Models ecosystem for interactive, AI-powered features. 24 | 25 | ## 🍅 [Ingredient-Based Recipes](/Yummy/) 26 | 27 | Turn Ingredients into Recipes – Powered by AI 28 | Discover delicious recipes based on what’s in your kitchen. Just select the ingredients you have—like tomatoes, chicken, spinach, or garlic—and get personalized, easy-to-follow recipes instantly. 29 | 30 | This app uses Apple’s new Foundation Models framework to understand your ingredient selections and generate creative, high-quality recipes with natural language intelligence. Whether you're trying to reduce food waste, find dinner ideas fast, or experiment with what’s in your fridge, this app is your smart kitchen companion. 31 | 32 | [View the demo on Twitter/X](https://x.com/azamsharp/status/1934113611162718653) 33 | 34 | 35 | ## [Swift Exams](/SwiftExams/) 36 | 37 | Swift Exams is an iOS app that leverages Apple’s Foundation Models framework to generate customized Swift programming quizzes based on the user’s skill level. Designed with SwiftUI and running entirely on-device, this app provides a secure and responsive learning experience for Swift developers. 38 | 39 | 📱 Features 40 | 🧠 AI-Generated Questions: Uses Apple’s Foundation Models to generate multiple-choice questions tailored to different skill levels. 41 | 42 | 🎯 Skill Levels: Choose from beginner to advanced levels to match your learning goals. 43 | 44 | 📝 Interactive UI: Clean, SwiftUI-powered interface to select answers and view instant feedback. 45 | 46 | 🏆 Score Summary: View your results with an intuitive score overlay. 47 | 48 | 🔐 On-Device Intelligence: All AI processing happens on-device using Apple’s LanguageModelSession. 49 | 50 | [View Demo](https://x.com/azamsharp/status/1936985443637035388) 51 | 52 | Want to learn more check out my course [Getting Started with the Foundation Models Framework](https://azamsharp.teachable.com/p/getting-started-with-the-foundation-models-framework). 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld/transcript.txt: -------------------------------------------------------------------------------- 1 | 2 | Hello! I’m Mia from the Wallet & Apple Pay team and today, I’m excited to share with you just some of our new features this year that I think you’ll love. 3 | We’ll be covering three main topics, enhancements to the merchant and payment experience, improvements on sharing orders with your customers and some great new capabilities coming to the FinanceKit API. 4 | But first, let’s take a look at the merchant experience. 5 | We’ve continually sought more ways to improve the Apple Pay customer experience from streamlining payments to offering a multitude of ways for merchants to engage with customers beyond the purchase. 6 | And this year is no different. 7 | We’re introducing a new and improved design for the Apple Pay button, a new way to view preauthorised payments, and a way for merchants to provide rich information to help your brand stand out. 8 | It’s been a decade since we launched Apple Pay and ever since then, users have looked to it for secure, trusted, and reliable payments. 9 | Now, I’m sure you’re all familiar with this: Customers love the easy checkout experience it brings, simplifying the process and letting them skip straight to the purchase. 10 | We wanted to bring an even better experience to merchants and customers alike, so this year, the Apple Pay button gets dynamic. 11 | Let’s have a look at it in action. 12 | When using your app, relevant customers may see their default payment method with their card art on display. 13 | The new button will help engage customers and bring them into the Apple Pay experience, making checkouts easier and faster than before. 14 | For the button to show the best card for the purchase, provide a Merchant Category Code and the supported payment networks as part of your payment request and pass it in to the button’s initialiser. 15 | If the default card is unavailable for a transaction, the next available card is shown instead. 16 | As a refresher, a Merchant Category Code is one of a list of industry-standard, pre-defined codes that represent the various types of commerce a merchant can engage in. 17 | It lets customers know in advance whether a payment method is supported for your transaction, helping them choose the right one and avoid pesky failed payments. 18 | You can easily set a Merchant Category Code for payment requests both in-app and on the web, so, let’s see how that’s done. 19 | Here we have an existing in-app PKPaymentRequest that we’re going to add a Merchant Category Code to. 20 | We already indicate what payment networks are supported by the transaction using the supportedNetworks and merchantCapabilities properties. 21 | Cards using payment networks not in the supportedNetworks array are marked as unavailable, while merchantCapabilities can be used to specify which cryptographic protocols and card types are supported for the payment. 22 | To allow these to affect which card is shown on the dynamic Apple Pay button, make sure to use an initialiser that takes a PKPaymentRequest. 23 | For Merchant Category Codes, all you need to do is initialise one with the relevant code for your business. 24 | and assign it to the merchantCategoryCode property. 25 | This one in particular refers to Pet Shops, Pet Food and Supplies. 26 | Now, you’re all set. 27 | Again, we encourage you to provide a Merchant Category Code whenever you create a payment request along with supportedNetworks and merchantCapabilities whenever it’s relevant, to enable the best experience for you and your customers. 28 | Anyway, let’s go back to the button. 29 | We prioritise user privacy and security, so just as before, card art and card details are inaccessible to apps that use Apple Pay. 30 | SwiftUI and UIKit apps will adopt the new button for free, no extra development work required. 31 | However, if you did want to use the previous treatment, we’re adding a new view modifier to help with that. 32 | Here we have an example Implementation of an Apple Pay button within an app. 33 | By default, the optimal appearance is chosen based on the users’ circumstances, but if you apply a payWithApplePayButtonDisableCardArt view modifier, the original button will always be shown. 34 | The modifier works on view hierarchies as well, so you can apply it to multiple views at once, or have it apply across the entire app. 35 | That was our update to the Apple Pay button. 36 | With that, we move on to our enhancements to merchant tokens and preauthorised payments. 37 | We’ve created a unified view for preauthorised payments and, brought you more opportunities for customising your customers’ experience. 38 | They can view all of their preauthorised payments in one place, and receive notifications about upcoming payments. 39 | Finally, you can now provide rich information to customise how you appear to users, and give them an engaging interaction with your brand. 40 | Let’s see how this works. 41 | The new preauthorised payments view can be found in the Wallet app by selecting Payments from the new More menu, or via the card details view. 42 | From it, you can see a list of every preauthorised payment and the merchants they’re from. 43 | Now, let’s navigate into a merchant and see what it offers. 44 | As you can see, the merchant presentation has been greatly improved. 45 | Before, you only had the merchant name as determined by the payment network. 46 | But now, you can provide an icon, a custom merchant name, a description and image for every payment, and more. 47 | This will bring a much more engaging experience to your customers, helping them recognise your brand and understand their payments better. 48 | You can also set your icon via Apple Business Connect, so, let’s take a look at that. 49 | Apple Business Connect is a service that lets you register information about your business, such as your logo, name and email addresses. 50 | This lets you unify your brand by controlling how you appear in Maps, Mail, and more. 51 | This provides a consistent experience to your customers wherever your brand appears across the system. 52 | To get started with Apple Business Connect, simply visit the website, register your business and fill in the details. 53 | Every entry is vetted by Apple, so customers have the peace of mind that your brand, is your brand. 54 | Next up, oop, looks like I just got a notification. 55 | Ah, my sock subscription is about to renew tomorrow, so let’s tap it to view more details. 56 | As you can see, it brings me right to the relevant view within preauthorised payments with all the lovely 57 | -------------------------------------------------------------------------------- /Travel/Travel/Models/Generables/Itinerary.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Iternary.swift 3 | // Travel 4 | // 5 | // Created by Mohammad Azam on 6/11/25. 6 | // 7 | 8 | import Foundation 9 | import FoundationModels 10 | 11 | @Generable 12 | struct Itinerary: Equatable { 13 | 14 | @Guide(description: "A descriptive title for the itinerary, such as the destination or theme of the trip.") 15 | let title: String 16 | 17 | @Guide(description: "A general description providing context, tone, or highlights of the trip.") 18 | let description: String 19 | 20 | @Guide(description: "Detailed plan for each day of the itinerary, including the day number and a description of planned activities.", .count(3)) 21 | var days: [DayPlan] 22 | 23 | @Guide(description: "This will serve as the summary of the 3-day travel itinerary.") 24 | var summary: String 25 | } 26 | 27 | @Generable 28 | struct DayPlan: Equatable { 29 | @Guide(description: "The day number within the itinerary (e.g., 1 for Day 1).") 30 | let day: Int 31 | 32 | @Guide(description: "A detailed description of the planned activities, locations, and experiences for this day.") 33 | let plan: String 34 | 35 | @Guide(.count(3)) 36 | let activities: [Activity] 37 | } 38 | 39 | @Generable 40 | struct Activity: Equatable { 41 | 42 | @Guide(description: "The category or kind of the activity, such as hiking or camping.") 43 | let type: ActivityKind 44 | 45 | @Guide(description: "A short, descriptive title for the activity, like 'Sunset Hike at Canyon Trail'.") 46 | let title: String 47 | 48 | @Guide(description: "A detailed description of the activity, including what to expect and any important notes.") 49 | let description: String 50 | } 51 | 52 | extension Activity { 53 | 54 | static var preview: Activity.PartiallyGenerated { 55 | try! Activity.PartiallyGenerated( 56 | GeneratedContent( 57 | Activity( 58 | type: .nature, 59 | title: "Explore Hidden Falls", 60 | description: "Take a scenic trail through the forest to reach Hidden Falls, a serene waterfall surrounded by lush greenery and wildlife." 61 | ) 62 | ) 63 | ) 64 | } 65 | 66 | } 67 | 68 | 69 | @Generable 70 | enum ActivityKind: String, Equatable { 71 | case hiking 72 | case camping 73 | case wildlifeViewing 74 | case scenicDrive 75 | case photography 76 | case sightseeing 77 | case nature 78 | case walking 79 | } 80 | 81 | extension Itinerary: InstructionsRepresentable { 82 | 83 | static var exampleTripToNationalPark: Itinerary { 84 | Itinerary( 85 | title: "Adventure Through Yellowstone National Park", 86 | description: "Discover the geothermal wonders, scenic hikes, and wildlife of America's first national park on this immersive 3-day journey.", 87 | days: [ 88 | DayPlan( 89 | day: 1, 90 | plan: "Arrive at Yellowstone and explore the famous geysers and hot springs in the park's western region.", 91 | activities: [ 92 | Activity( 93 | type: .sightseeing, 94 | title: "Old Faithful Geyser", 95 | description: "Watch one of the most predictable geothermal features in the world erupt approximately every 90 minutes." 96 | ), 97 | Activity( 98 | type: .nature, 99 | title: "Grand Prismatic Spring", 100 | description: "Marvel at the vibrant colors of this enormous hot spring, best viewed from the overlook trail." 101 | ), 102 | Activity( 103 | type: .walking, 104 | title: "Fountain Paint Pot Trail", 105 | description: "Stroll past mud pots, fumaroles, and geysers on this short, accessible boardwalk trail." 106 | ) 107 | ] 108 | ), 109 | DayPlan( 110 | day: 2, 111 | plan: "Hike through scenic landscapes and keep an eye out for bison and other wildlife.", 112 | activities: [ 113 | Activity( 114 | type: .hiking, 115 | title: "Lamar Valley", 116 | description: "Go on an early morning hike for a chance to see wolves, bears, and herds of bison in this wildlife-rich valley." 117 | ), 118 | Activity( 119 | type: .nature, 120 | title: "Yellowstone Lake Picnic", 121 | description: "Enjoy a relaxing picnic by the shores of Yellowstone Lake with stunning mountain views." 122 | ), 123 | Activity( 124 | type: .camping, 125 | title: "Campfire Evening", 126 | description: "Wrap up the day with a cozy campfire, s’mores, and storytelling under the stars." 127 | ) 128 | ] 129 | ), 130 | DayPlan( 131 | day: 3, 132 | plan: "Visit the dramatic canyons and waterfalls before heading home.", 133 | activities: [ 134 | Activity( 135 | type: .sightseeing, 136 | title: "Grand Canyon of the Yellowstone", 137 | description: "Hike to Artist Point for breathtaking views of the colorful canyon and Lower Falls." 138 | ), 139 | Activity( 140 | type: .photography, 141 | title: "Upper Falls Viewpoint", 142 | description: "Capture the power and beauty of the Upper Falls from the overlook trail." 143 | ), 144 | Activity( 145 | type: .walking, 146 | title: "Geyser Basin Drive", 147 | description: "Take a leisurely drive with stops at various basins to say goodbye to the park’s geothermal wonders." 148 | ) 149 | ] 150 | ) 151 | ], 152 | summary: "This 3-day Yellowstone adventure blends hiking, wildlife spotting, geothermal exploration, and quiet moments in nature—perfect for outdoor lovers and first-time visitors alike." 153 | ) 154 | } 155 | 156 | 157 | 158 | static var preview: Itinerary.PartiallyGenerated { 159 | return try! Itinerary.PartiallyGenerated( 160 | GeneratedContent( 161 | Itinerary( 162 | title: "Exciting Trip to the Rocky Mountains", 163 | description: "An adventurous 3-day journey exploring scenic trails, wildlife, and local culture in the heart of the Rockies.", 164 | days: [ 165 | DayPlan( 166 | day: 1, 167 | plan: "Arrive and take a scenic drive through the national park. Visit the visitor center and enjoy a sunset hike.", 168 | activities: [ 169 | Activity( 170 | type: .sightseeing, 171 | title: "Scenic Drive Through Trail Ridge Road", 172 | description: "Enjoy panoramic views as you ascend to over 12,000 feet on one of the highest paved roads in North America." 173 | ), 174 | Activity( 175 | type: .nature, 176 | title: "Beaver Meadows Visitor Center", 177 | description: "Learn about the park's geology, wildlife, and hiking trails from rangers and interactive exhibits." 178 | ), 179 | Activity( 180 | type: .hiking, 181 | title: "Sunset Hike at Bear Lake", 182 | description: "Take a short hike around Bear Lake and enjoy the alpine glow on the surrounding peaks as the sun sets." 183 | ) 184 | ] 185 | ) 186 | ], 187 | summary: "This itinerary offers a perfect mix of adventure and relaxation across the Rocky Mountains in three unforgettable days." 188 | ) 189 | ) 190 | ) 191 | } 192 | 193 | } 194 | -------------------------------------------------------------------------------- /Jokes/Jokes.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 77; 7 | objects = { 8 | 9 | /* Begin PBXFileReference section */ 10 | 8D46DD7F2DFCFE3D004560D3 /* Jokes.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Jokes.app; sourceTree = BUILT_PRODUCTS_DIR; }; 11 | /* End PBXFileReference section */ 12 | 13 | /* Begin PBXFileSystemSynchronizedRootGroup section */ 14 | 8D46DD812DFCFE3D004560D3 /* Jokes */ = { 15 | isa = PBXFileSystemSynchronizedRootGroup; 16 | path = Jokes; 17 | sourceTree = ""; 18 | }; 19 | /* End PBXFileSystemSynchronizedRootGroup section */ 20 | 21 | /* Begin PBXFrameworksBuildPhase section */ 22 | 8D46DD7C2DFCFE3D004560D3 /* Frameworks */ = { 23 | isa = PBXFrameworksBuildPhase; 24 | buildActionMask = 2147483647; 25 | files = ( 26 | ); 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXFrameworksBuildPhase section */ 30 | 31 | /* Begin PBXGroup section */ 32 | 8D46DD762DFCFE3D004560D3 = { 33 | isa = PBXGroup; 34 | children = ( 35 | 8D46DD812DFCFE3D004560D3 /* Jokes */, 36 | 8D46DD802DFCFE3D004560D3 /* Products */, 37 | ); 38 | sourceTree = ""; 39 | }; 40 | 8D46DD802DFCFE3D004560D3 /* Products */ = { 41 | isa = PBXGroup; 42 | children = ( 43 | 8D46DD7F2DFCFE3D004560D3 /* Jokes.app */, 44 | ); 45 | name = Products; 46 | sourceTree = ""; 47 | }; 48 | /* End PBXGroup section */ 49 | 50 | /* Begin PBXNativeTarget section */ 51 | 8D46DD7E2DFCFE3D004560D3 /* Jokes */ = { 52 | isa = PBXNativeTarget; 53 | buildConfigurationList = 8D46DD8A2DFCFE3F004560D3 /* Build configuration list for PBXNativeTarget "Jokes" */; 54 | buildPhases = ( 55 | 8D46DD7B2DFCFE3D004560D3 /* Sources */, 56 | 8D46DD7C2DFCFE3D004560D3 /* Frameworks */, 57 | 8D46DD7D2DFCFE3D004560D3 /* Resources */, 58 | ); 59 | buildRules = ( 60 | ); 61 | dependencies = ( 62 | ); 63 | fileSystemSynchronizedGroups = ( 64 | 8D46DD812DFCFE3D004560D3 /* Jokes */, 65 | ); 66 | name = Jokes; 67 | packageProductDependencies = ( 68 | ); 69 | productName = Jokes; 70 | productReference = 8D46DD7F2DFCFE3D004560D3 /* Jokes.app */; 71 | productType = "com.apple.product-type.application"; 72 | }; 73 | /* End PBXNativeTarget section */ 74 | 75 | /* Begin PBXProject section */ 76 | 8D46DD772DFCFE3D004560D3 /* Project object */ = { 77 | isa = PBXProject; 78 | attributes = { 79 | BuildIndependentTargetsInParallel = 1; 80 | LastSwiftUpdateCheck = 2600; 81 | LastUpgradeCheck = 2600; 82 | TargetAttributes = { 83 | 8D46DD7E2DFCFE3D004560D3 = { 84 | CreatedOnToolsVersion = 26.0; 85 | }; 86 | }; 87 | }; 88 | buildConfigurationList = 8D46DD7A2DFCFE3D004560D3 /* Build configuration list for PBXProject "Jokes" */; 89 | developmentRegion = en; 90 | hasScannedForEncodings = 0; 91 | knownRegions = ( 92 | en, 93 | Base, 94 | ); 95 | mainGroup = 8D46DD762DFCFE3D004560D3; 96 | minimizedProjectReferenceProxies = 1; 97 | preferredProjectObjectVersion = 77; 98 | productRefGroup = 8D46DD802DFCFE3D004560D3 /* Products */; 99 | projectDirPath = ""; 100 | projectRoot = ""; 101 | targets = ( 102 | 8D46DD7E2DFCFE3D004560D3 /* Jokes */, 103 | ); 104 | }; 105 | /* End PBXProject section */ 106 | 107 | /* Begin PBXResourcesBuildPhase section */ 108 | 8D46DD7D2DFCFE3D004560D3 /* Resources */ = { 109 | isa = PBXResourcesBuildPhase; 110 | buildActionMask = 2147483647; 111 | files = ( 112 | ); 113 | runOnlyForDeploymentPostprocessing = 0; 114 | }; 115 | /* End PBXResourcesBuildPhase section */ 116 | 117 | /* Begin PBXSourcesBuildPhase section */ 118 | 8D46DD7B2DFCFE3D004560D3 /* Sources */ = { 119 | isa = PBXSourcesBuildPhase; 120 | buildActionMask = 2147483647; 121 | files = ( 122 | ); 123 | runOnlyForDeploymentPostprocessing = 0; 124 | }; 125 | /* End PBXSourcesBuildPhase section */ 126 | 127 | /* Begin XCBuildConfiguration section */ 128 | 8D46DD882DFCFE3F004560D3 /* Debug */ = { 129 | isa = XCBuildConfiguration; 130 | buildSettings = { 131 | ALWAYS_SEARCH_USER_PATHS = NO; 132 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 133 | CLANG_ANALYZER_NONNULL = YES; 134 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 135 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 136 | CLANG_ENABLE_MODULES = YES; 137 | CLANG_ENABLE_OBJC_ARC = YES; 138 | CLANG_ENABLE_OBJC_WEAK = YES; 139 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 140 | CLANG_WARN_BOOL_CONVERSION = YES; 141 | CLANG_WARN_COMMA = YES; 142 | CLANG_WARN_CONSTANT_CONVERSION = YES; 143 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 144 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 145 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 146 | CLANG_WARN_EMPTY_BODY = YES; 147 | CLANG_WARN_ENUM_CONVERSION = YES; 148 | CLANG_WARN_INFINITE_RECURSION = YES; 149 | CLANG_WARN_INT_CONVERSION = YES; 150 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 151 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 152 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 153 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 154 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 155 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 156 | CLANG_WARN_STRICT_PROTOTYPES = YES; 157 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 158 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 159 | CLANG_WARN_UNREACHABLE_CODE = YES; 160 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 161 | COPY_PHASE_STRIP = NO; 162 | DEBUG_INFORMATION_FORMAT = dwarf; 163 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 164 | ENABLE_STRICT_OBJC_MSGSEND = YES; 165 | ENABLE_TESTABILITY = YES; 166 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 167 | GCC_C_LANGUAGE_STANDARD = gnu17; 168 | GCC_DYNAMIC_NO_PIC = NO; 169 | GCC_NO_COMMON_BLOCKS = YES; 170 | GCC_OPTIMIZATION_LEVEL = 0; 171 | GCC_PREPROCESSOR_DEFINITIONS = ( 172 | "DEBUG=1", 173 | "$(inherited)", 174 | ); 175 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 176 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 177 | GCC_WARN_UNDECLARED_SELECTOR = YES; 178 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 179 | GCC_WARN_UNUSED_FUNCTION = YES; 180 | GCC_WARN_UNUSED_VARIABLE = YES; 181 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 182 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 183 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 184 | MTL_FAST_MATH = YES; 185 | ONLY_ACTIVE_ARCH = YES; 186 | SDKROOT = iphoneos; 187 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; 188 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 189 | }; 190 | name = Debug; 191 | }; 192 | 8D46DD892DFCFE3F004560D3 /* Release */ = { 193 | isa = XCBuildConfiguration; 194 | buildSettings = { 195 | ALWAYS_SEARCH_USER_PATHS = NO; 196 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 197 | CLANG_ANALYZER_NONNULL = YES; 198 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 199 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 200 | CLANG_ENABLE_MODULES = YES; 201 | CLANG_ENABLE_OBJC_ARC = YES; 202 | CLANG_ENABLE_OBJC_WEAK = YES; 203 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 204 | CLANG_WARN_BOOL_CONVERSION = YES; 205 | CLANG_WARN_COMMA = YES; 206 | CLANG_WARN_CONSTANT_CONVERSION = YES; 207 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 208 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 209 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 210 | CLANG_WARN_EMPTY_BODY = YES; 211 | CLANG_WARN_ENUM_CONVERSION = YES; 212 | CLANG_WARN_INFINITE_RECURSION = YES; 213 | CLANG_WARN_INT_CONVERSION = YES; 214 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 215 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 216 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 217 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 218 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 219 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 220 | CLANG_WARN_STRICT_PROTOTYPES = YES; 221 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 222 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 223 | CLANG_WARN_UNREACHABLE_CODE = YES; 224 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 225 | COPY_PHASE_STRIP = NO; 226 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 227 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 228 | ENABLE_NS_ASSERTIONS = NO; 229 | ENABLE_STRICT_OBJC_MSGSEND = YES; 230 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 231 | GCC_C_LANGUAGE_STANDARD = gnu17; 232 | GCC_NO_COMMON_BLOCKS = YES; 233 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 234 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 235 | GCC_WARN_UNDECLARED_SELECTOR = YES; 236 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 237 | GCC_WARN_UNUSED_FUNCTION = YES; 238 | GCC_WARN_UNUSED_VARIABLE = YES; 239 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 240 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 241 | MTL_ENABLE_DEBUG_INFO = NO; 242 | MTL_FAST_MATH = YES; 243 | SDKROOT = iphoneos; 244 | SWIFT_COMPILATION_MODE = wholemodule; 245 | VALIDATE_PRODUCT = YES; 246 | }; 247 | name = Release; 248 | }; 249 | 8D46DD8B2DFCFE3F004560D3 /* Debug */ = { 250 | isa = XCBuildConfiguration; 251 | buildSettings = { 252 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 253 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 254 | CODE_SIGN_STYLE = Automatic; 255 | CURRENT_PROJECT_VERSION = 1; 256 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 257 | ENABLE_PREVIEWS = YES; 258 | GENERATE_INFOPLIST_FILE = YES; 259 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 260 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 261 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 262 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 263 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 264 | LD_RUNPATH_SEARCH_PATHS = ( 265 | "$(inherited)", 266 | "@executable_path/Frameworks", 267 | ); 268 | MARKETING_VERSION = 1.0; 269 | PRODUCT_BUNDLE_IDENTIFIER = com.azamsharp.Jokes; 270 | PRODUCT_NAME = "$(TARGET_NAME)"; 271 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 272 | SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 273 | SWIFT_EMIT_LOC_STRINGS = YES; 274 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 275 | SWIFT_VERSION = 5.0; 276 | TARGETED_DEVICE_FAMILY = "1,2"; 277 | }; 278 | name = Debug; 279 | }; 280 | 8D46DD8C2DFCFE3F004560D3 /* Release */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 284 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 285 | CODE_SIGN_STYLE = Automatic; 286 | CURRENT_PROJECT_VERSION = 1; 287 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 288 | ENABLE_PREVIEWS = YES; 289 | GENERATE_INFOPLIST_FILE = YES; 290 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 291 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 292 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 293 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 294 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 295 | LD_RUNPATH_SEARCH_PATHS = ( 296 | "$(inherited)", 297 | "@executable_path/Frameworks", 298 | ); 299 | MARKETING_VERSION = 1.0; 300 | PRODUCT_BUNDLE_IDENTIFIER = com.azamsharp.Jokes; 301 | PRODUCT_NAME = "$(TARGET_NAME)"; 302 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 303 | SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 304 | SWIFT_EMIT_LOC_STRINGS = YES; 305 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 306 | SWIFT_VERSION = 5.0; 307 | TARGETED_DEVICE_FAMILY = "1,2"; 308 | }; 309 | name = Release; 310 | }; 311 | /* End XCBuildConfiguration section */ 312 | 313 | /* Begin XCConfigurationList section */ 314 | 8D46DD7A2DFCFE3D004560D3 /* Build configuration list for PBXProject "Jokes" */ = { 315 | isa = XCConfigurationList; 316 | buildConfigurations = ( 317 | 8D46DD882DFCFE3F004560D3 /* Debug */, 318 | 8D46DD892DFCFE3F004560D3 /* Release */, 319 | ); 320 | defaultConfigurationIsVisible = 0; 321 | defaultConfigurationName = Release; 322 | }; 323 | 8D46DD8A2DFCFE3F004560D3 /* Build configuration list for PBXNativeTarget "Jokes" */ = { 324 | isa = XCConfigurationList; 325 | buildConfigurations = ( 326 | 8D46DD8B2DFCFE3F004560D3 /* Debug */, 327 | 8D46DD8C2DFCFE3F004560D3 /* Release */, 328 | ); 329 | defaultConfigurationIsVisible = 0; 330 | defaultConfigurationName = Release; 331 | }; 332 | /* End XCConfigurationList section */ 333 | }; 334 | rootObject = 8D46DD772DFCFE3D004560D3 /* Project object */; 335 | } 336 | -------------------------------------------------------------------------------- /Yummy/Yummy.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 77; 7 | objects = { 8 | 9 | /* Begin PBXFileReference section */ 10 | 8D8165FB2DFE440000E6D003 /* Yummy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Yummy.app; sourceTree = BUILT_PRODUCTS_DIR; }; 11 | /* End PBXFileReference section */ 12 | 13 | /* Begin PBXFileSystemSynchronizedRootGroup section */ 14 | 8D8165FD2DFE440000E6D003 /* Yummy */ = { 15 | isa = PBXFileSystemSynchronizedRootGroup; 16 | path = Yummy; 17 | sourceTree = ""; 18 | }; 19 | /* End PBXFileSystemSynchronizedRootGroup section */ 20 | 21 | /* Begin PBXFrameworksBuildPhase section */ 22 | 8D8165F82DFE440000E6D003 /* Frameworks */ = { 23 | isa = PBXFrameworksBuildPhase; 24 | buildActionMask = 2147483647; 25 | files = ( 26 | ); 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXFrameworksBuildPhase section */ 30 | 31 | /* Begin PBXGroup section */ 32 | 8D8165F22DFE440000E6D003 = { 33 | isa = PBXGroup; 34 | children = ( 35 | 8D8165FD2DFE440000E6D003 /* Yummy */, 36 | 8D8165FC2DFE440000E6D003 /* Products */, 37 | ); 38 | sourceTree = ""; 39 | }; 40 | 8D8165FC2DFE440000E6D003 /* Products */ = { 41 | isa = PBXGroup; 42 | children = ( 43 | 8D8165FB2DFE440000E6D003 /* Yummy.app */, 44 | ); 45 | name = Products; 46 | sourceTree = ""; 47 | }; 48 | /* End PBXGroup section */ 49 | 50 | /* Begin PBXNativeTarget section */ 51 | 8D8165FA2DFE440000E6D003 /* Yummy */ = { 52 | isa = PBXNativeTarget; 53 | buildConfigurationList = 8D8166062DFE440100E6D003 /* Build configuration list for PBXNativeTarget "Yummy" */; 54 | buildPhases = ( 55 | 8D8165F72DFE440000E6D003 /* Sources */, 56 | 8D8165F82DFE440000E6D003 /* Frameworks */, 57 | 8D8165F92DFE440000E6D003 /* Resources */, 58 | ); 59 | buildRules = ( 60 | ); 61 | dependencies = ( 62 | ); 63 | fileSystemSynchronizedGroups = ( 64 | 8D8165FD2DFE440000E6D003 /* Yummy */, 65 | ); 66 | name = Yummy; 67 | packageProductDependencies = ( 68 | ); 69 | productName = Yummy; 70 | productReference = 8D8165FB2DFE440000E6D003 /* Yummy.app */; 71 | productType = "com.apple.product-type.application"; 72 | }; 73 | /* End PBXNativeTarget section */ 74 | 75 | /* Begin PBXProject section */ 76 | 8D8165F32DFE440000E6D003 /* Project object */ = { 77 | isa = PBXProject; 78 | attributes = { 79 | BuildIndependentTargetsInParallel = 1; 80 | LastSwiftUpdateCheck = 2600; 81 | LastUpgradeCheck = 2600; 82 | TargetAttributes = { 83 | 8D8165FA2DFE440000E6D003 = { 84 | CreatedOnToolsVersion = 26.0; 85 | }; 86 | }; 87 | }; 88 | buildConfigurationList = 8D8165F62DFE440000E6D003 /* Build configuration list for PBXProject "Yummy" */; 89 | developmentRegion = en; 90 | hasScannedForEncodings = 0; 91 | knownRegions = ( 92 | en, 93 | Base, 94 | ); 95 | mainGroup = 8D8165F22DFE440000E6D003; 96 | minimizedProjectReferenceProxies = 1; 97 | preferredProjectObjectVersion = 77; 98 | productRefGroup = 8D8165FC2DFE440000E6D003 /* Products */; 99 | projectDirPath = ""; 100 | projectRoot = ""; 101 | targets = ( 102 | 8D8165FA2DFE440000E6D003 /* Yummy */, 103 | ); 104 | }; 105 | /* End PBXProject section */ 106 | 107 | /* Begin PBXResourcesBuildPhase section */ 108 | 8D8165F92DFE440000E6D003 /* Resources */ = { 109 | isa = PBXResourcesBuildPhase; 110 | buildActionMask = 2147483647; 111 | files = ( 112 | ); 113 | runOnlyForDeploymentPostprocessing = 0; 114 | }; 115 | /* End PBXResourcesBuildPhase section */ 116 | 117 | /* Begin PBXSourcesBuildPhase section */ 118 | 8D8165F72DFE440000E6D003 /* Sources */ = { 119 | isa = PBXSourcesBuildPhase; 120 | buildActionMask = 2147483647; 121 | files = ( 122 | ); 123 | runOnlyForDeploymentPostprocessing = 0; 124 | }; 125 | /* End PBXSourcesBuildPhase section */ 126 | 127 | /* Begin XCBuildConfiguration section */ 128 | 8D8166042DFE440100E6D003 /* Debug */ = { 129 | isa = XCBuildConfiguration; 130 | buildSettings = { 131 | ALWAYS_SEARCH_USER_PATHS = NO; 132 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 133 | CLANG_ANALYZER_NONNULL = YES; 134 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 135 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 136 | CLANG_ENABLE_MODULES = YES; 137 | CLANG_ENABLE_OBJC_ARC = YES; 138 | CLANG_ENABLE_OBJC_WEAK = YES; 139 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 140 | CLANG_WARN_BOOL_CONVERSION = YES; 141 | CLANG_WARN_COMMA = YES; 142 | CLANG_WARN_CONSTANT_CONVERSION = YES; 143 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 144 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 145 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 146 | CLANG_WARN_EMPTY_BODY = YES; 147 | CLANG_WARN_ENUM_CONVERSION = YES; 148 | CLANG_WARN_INFINITE_RECURSION = YES; 149 | CLANG_WARN_INT_CONVERSION = YES; 150 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 151 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 152 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 153 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 154 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 155 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 156 | CLANG_WARN_STRICT_PROTOTYPES = YES; 157 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 158 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 159 | CLANG_WARN_UNREACHABLE_CODE = YES; 160 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 161 | COPY_PHASE_STRIP = NO; 162 | DEBUG_INFORMATION_FORMAT = dwarf; 163 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 164 | ENABLE_STRICT_OBJC_MSGSEND = YES; 165 | ENABLE_TESTABILITY = YES; 166 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 167 | GCC_C_LANGUAGE_STANDARD = gnu17; 168 | GCC_DYNAMIC_NO_PIC = NO; 169 | GCC_NO_COMMON_BLOCKS = YES; 170 | GCC_OPTIMIZATION_LEVEL = 0; 171 | GCC_PREPROCESSOR_DEFINITIONS = ( 172 | "DEBUG=1", 173 | "$(inherited)", 174 | ); 175 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 176 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 177 | GCC_WARN_UNDECLARED_SELECTOR = YES; 178 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 179 | GCC_WARN_UNUSED_FUNCTION = YES; 180 | GCC_WARN_UNUSED_VARIABLE = YES; 181 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 182 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 183 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 184 | MTL_FAST_MATH = YES; 185 | ONLY_ACTIVE_ARCH = YES; 186 | SDKROOT = iphoneos; 187 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; 188 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 189 | }; 190 | name = Debug; 191 | }; 192 | 8D8166052DFE440100E6D003 /* Release */ = { 193 | isa = XCBuildConfiguration; 194 | buildSettings = { 195 | ALWAYS_SEARCH_USER_PATHS = NO; 196 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 197 | CLANG_ANALYZER_NONNULL = YES; 198 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 199 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 200 | CLANG_ENABLE_MODULES = YES; 201 | CLANG_ENABLE_OBJC_ARC = YES; 202 | CLANG_ENABLE_OBJC_WEAK = YES; 203 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 204 | CLANG_WARN_BOOL_CONVERSION = YES; 205 | CLANG_WARN_COMMA = YES; 206 | CLANG_WARN_CONSTANT_CONVERSION = YES; 207 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 208 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 209 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 210 | CLANG_WARN_EMPTY_BODY = YES; 211 | CLANG_WARN_ENUM_CONVERSION = YES; 212 | CLANG_WARN_INFINITE_RECURSION = YES; 213 | CLANG_WARN_INT_CONVERSION = YES; 214 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 215 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 216 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 217 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 218 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 219 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 220 | CLANG_WARN_STRICT_PROTOTYPES = YES; 221 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 222 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 223 | CLANG_WARN_UNREACHABLE_CODE = YES; 224 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 225 | COPY_PHASE_STRIP = NO; 226 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 227 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 228 | ENABLE_NS_ASSERTIONS = NO; 229 | ENABLE_STRICT_OBJC_MSGSEND = YES; 230 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 231 | GCC_C_LANGUAGE_STANDARD = gnu17; 232 | GCC_NO_COMMON_BLOCKS = YES; 233 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 234 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 235 | GCC_WARN_UNDECLARED_SELECTOR = YES; 236 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 237 | GCC_WARN_UNUSED_FUNCTION = YES; 238 | GCC_WARN_UNUSED_VARIABLE = YES; 239 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 240 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 241 | MTL_ENABLE_DEBUG_INFO = NO; 242 | MTL_FAST_MATH = YES; 243 | SDKROOT = iphoneos; 244 | SWIFT_COMPILATION_MODE = wholemodule; 245 | VALIDATE_PRODUCT = YES; 246 | }; 247 | name = Release; 248 | }; 249 | 8D8166072DFE440100E6D003 /* Debug */ = { 250 | isa = XCBuildConfiguration; 251 | buildSettings = { 252 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 253 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 254 | CODE_SIGN_STYLE = Automatic; 255 | CURRENT_PROJECT_VERSION = 1; 256 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 257 | ENABLE_PREVIEWS = YES; 258 | GENERATE_INFOPLIST_FILE = YES; 259 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 260 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 261 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 262 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 263 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 264 | LD_RUNPATH_SEARCH_PATHS = ( 265 | "$(inherited)", 266 | "@executable_path/Frameworks", 267 | ); 268 | MARKETING_VERSION = 1.0; 269 | PRODUCT_BUNDLE_IDENTIFIER = com.azamsharp.Yummy; 270 | PRODUCT_NAME = "$(TARGET_NAME)"; 271 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 272 | SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 273 | SWIFT_EMIT_LOC_STRINGS = YES; 274 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 275 | SWIFT_VERSION = 6.0; 276 | TARGETED_DEVICE_FAMILY = "1,2"; 277 | }; 278 | name = Debug; 279 | }; 280 | 8D8166082DFE440100E6D003 /* Release */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 284 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 285 | CODE_SIGN_STYLE = Automatic; 286 | CURRENT_PROJECT_VERSION = 1; 287 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 288 | ENABLE_PREVIEWS = YES; 289 | GENERATE_INFOPLIST_FILE = YES; 290 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 291 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 292 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 293 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 294 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 295 | LD_RUNPATH_SEARCH_PATHS = ( 296 | "$(inherited)", 297 | "@executable_path/Frameworks", 298 | ); 299 | MARKETING_VERSION = 1.0; 300 | PRODUCT_BUNDLE_IDENTIFIER = com.azamsharp.Yummy; 301 | PRODUCT_NAME = "$(TARGET_NAME)"; 302 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 303 | SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 304 | SWIFT_EMIT_LOC_STRINGS = YES; 305 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 306 | SWIFT_VERSION = 6.0; 307 | TARGETED_DEVICE_FAMILY = "1,2"; 308 | }; 309 | name = Release; 310 | }; 311 | /* End XCBuildConfiguration section */ 312 | 313 | /* Begin XCConfigurationList section */ 314 | 8D8165F62DFE440000E6D003 /* Build configuration list for PBXProject "Yummy" */ = { 315 | isa = XCConfigurationList; 316 | buildConfigurations = ( 317 | 8D8166042DFE440100E6D003 /* Debug */, 318 | 8D8166052DFE440100E6D003 /* Release */, 319 | ); 320 | defaultConfigurationIsVisible = 0; 321 | defaultConfigurationName = Release; 322 | }; 323 | 8D8166062DFE440100E6D003 /* Build configuration list for PBXNativeTarget "Yummy" */ = { 324 | isa = XCConfigurationList; 325 | buildConfigurations = ( 326 | 8D8166072DFE440100E6D003 /* Debug */, 327 | 8D8166082DFE440100E6D003 /* Release */, 328 | ); 329 | defaultConfigurationIsVisible = 0; 330 | defaultConfigurationName = Release; 331 | }; 332 | /* End XCConfigurationList section */ 333 | }; 334 | rootObject = 8D8165F32DFE440000E6D003 /* Project object */; 335 | } 336 | -------------------------------------------------------------------------------- /Travel/Travel.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 77; 7 | objects = { 8 | 9 | /* Begin PBXFileReference section */ 10 | 8DFF5C5B2DFA8245004826DF /* Travel.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Travel.app; sourceTree = BUILT_PRODUCTS_DIR; }; 11 | /* End PBXFileReference section */ 12 | 13 | /* Begin PBXFileSystemSynchronizedRootGroup section */ 14 | 8DFF5C5D2DFA8245004826DF /* Travel */ = { 15 | isa = PBXFileSystemSynchronizedRootGroup; 16 | path = Travel; 17 | sourceTree = ""; 18 | }; 19 | /* End PBXFileSystemSynchronizedRootGroup section */ 20 | 21 | /* Begin PBXFrameworksBuildPhase section */ 22 | 8DFF5C582DFA8245004826DF /* Frameworks */ = { 23 | isa = PBXFrameworksBuildPhase; 24 | buildActionMask = 2147483647; 25 | files = ( 26 | ); 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXFrameworksBuildPhase section */ 30 | 31 | /* Begin PBXGroup section */ 32 | 8DFF5C522DFA8245004826DF = { 33 | isa = PBXGroup; 34 | children = ( 35 | 8DFF5C5D2DFA8245004826DF /* Travel */, 36 | 8DFF5C5C2DFA8245004826DF /* Products */, 37 | ); 38 | sourceTree = ""; 39 | }; 40 | 8DFF5C5C2DFA8245004826DF /* Products */ = { 41 | isa = PBXGroup; 42 | children = ( 43 | 8DFF5C5B2DFA8245004826DF /* Travel.app */, 44 | ); 45 | name = Products; 46 | sourceTree = ""; 47 | }; 48 | /* End PBXGroup section */ 49 | 50 | /* Begin PBXNativeTarget section */ 51 | 8DFF5C5A2DFA8245004826DF /* Travel */ = { 52 | isa = PBXNativeTarget; 53 | buildConfigurationList = 8DFF5C662DFA8246004826DF /* Build configuration list for PBXNativeTarget "Travel" */; 54 | buildPhases = ( 55 | 8DFF5C572DFA8245004826DF /* Sources */, 56 | 8DFF5C582DFA8245004826DF /* Frameworks */, 57 | 8DFF5C592DFA8245004826DF /* Resources */, 58 | ); 59 | buildRules = ( 60 | ); 61 | dependencies = ( 62 | ); 63 | fileSystemSynchronizedGroups = ( 64 | 8DFF5C5D2DFA8245004826DF /* Travel */, 65 | ); 66 | name = Travel; 67 | packageProductDependencies = ( 68 | ); 69 | productName = Travel; 70 | productReference = 8DFF5C5B2DFA8245004826DF /* Travel.app */; 71 | productType = "com.apple.product-type.application"; 72 | }; 73 | /* End PBXNativeTarget section */ 74 | 75 | /* Begin PBXProject section */ 76 | 8DFF5C532DFA8245004826DF /* Project object */ = { 77 | isa = PBXProject; 78 | attributes = { 79 | BuildIndependentTargetsInParallel = 1; 80 | LastSwiftUpdateCheck = 2600; 81 | LastUpgradeCheck = 2600; 82 | TargetAttributes = { 83 | 8DFF5C5A2DFA8245004826DF = { 84 | CreatedOnToolsVersion = 26.0; 85 | }; 86 | }; 87 | }; 88 | buildConfigurationList = 8DFF5C562DFA8245004826DF /* Build configuration list for PBXProject "Travel" */; 89 | developmentRegion = en; 90 | hasScannedForEncodings = 0; 91 | knownRegions = ( 92 | en, 93 | Base, 94 | ); 95 | mainGroup = 8DFF5C522DFA8245004826DF; 96 | minimizedProjectReferenceProxies = 1; 97 | preferredProjectObjectVersion = 77; 98 | productRefGroup = 8DFF5C5C2DFA8245004826DF /* Products */; 99 | projectDirPath = ""; 100 | projectRoot = ""; 101 | targets = ( 102 | 8DFF5C5A2DFA8245004826DF /* Travel */, 103 | ); 104 | }; 105 | /* End PBXProject section */ 106 | 107 | /* Begin PBXResourcesBuildPhase section */ 108 | 8DFF5C592DFA8245004826DF /* Resources */ = { 109 | isa = PBXResourcesBuildPhase; 110 | buildActionMask = 2147483647; 111 | files = ( 112 | ); 113 | runOnlyForDeploymentPostprocessing = 0; 114 | }; 115 | /* End PBXResourcesBuildPhase section */ 116 | 117 | /* Begin PBXSourcesBuildPhase section */ 118 | 8DFF5C572DFA8245004826DF /* Sources */ = { 119 | isa = PBXSourcesBuildPhase; 120 | buildActionMask = 2147483647; 121 | files = ( 122 | ); 123 | runOnlyForDeploymentPostprocessing = 0; 124 | }; 125 | /* End PBXSourcesBuildPhase section */ 126 | 127 | /* Begin XCBuildConfiguration section */ 128 | 8DFF5C642DFA8246004826DF /* Debug */ = { 129 | isa = XCBuildConfiguration; 130 | buildSettings = { 131 | ALWAYS_SEARCH_USER_PATHS = NO; 132 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 133 | CLANG_ANALYZER_NONNULL = YES; 134 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 135 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 136 | CLANG_ENABLE_MODULES = YES; 137 | CLANG_ENABLE_OBJC_ARC = YES; 138 | CLANG_ENABLE_OBJC_WEAK = YES; 139 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 140 | CLANG_WARN_BOOL_CONVERSION = YES; 141 | CLANG_WARN_COMMA = YES; 142 | CLANG_WARN_CONSTANT_CONVERSION = YES; 143 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 144 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 145 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 146 | CLANG_WARN_EMPTY_BODY = YES; 147 | CLANG_WARN_ENUM_CONVERSION = YES; 148 | CLANG_WARN_INFINITE_RECURSION = YES; 149 | CLANG_WARN_INT_CONVERSION = YES; 150 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 151 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 152 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 153 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 154 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 155 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 156 | CLANG_WARN_STRICT_PROTOTYPES = YES; 157 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 158 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 159 | CLANG_WARN_UNREACHABLE_CODE = YES; 160 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 161 | COPY_PHASE_STRIP = NO; 162 | DEBUG_INFORMATION_FORMAT = dwarf; 163 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 164 | ENABLE_STRICT_OBJC_MSGSEND = YES; 165 | ENABLE_TESTABILITY = YES; 166 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 167 | GCC_C_LANGUAGE_STANDARD = gnu17; 168 | GCC_DYNAMIC_NO_PIC = NO; 169 | GCC_NO_COMMON_BLOCKS = YES; 170 | GCC_OPTIMIZATION_LEVEL = 0; 171 | GCC_PREPROCESSOR_DEFINITIONS = ( 172 | "DEBUG=1", 173 | "$(inherited)", 174 | ); 175 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 176 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 177 | GCC_WARN_UNDECLARED_SELECTOR = YES; 178 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 179 | GCC_WARN_UNUSED_FUNCTION = YES; 180 | GCC_WARN_UNUSED_VARIABLE = YES; 181 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 182 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 183 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 184 | MTL_FAST_MATH = YES; 185 | ONLY_ACTIVE_ARCH = YES; 186 | SDKROOT = iphoneos; 187 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; 188 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 189 | }; 190 | name = Debug; 191 | }; 192 | 8DFF5C652DFA8246004826DF /* Release */ = { 193 | isa = XCBuildConfiguration; 194 | buildSettings = { 195 | ALWAYS_SEARCH_USER_PATHS = NO; 196 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 197 | CLANG_ANALYZER_NONNULL = YES; 198 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 199 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 200 | CLANG_ENABLE_MODULES = YES; 201 | CLANG_ENABLE_OBJC_ARC = YES; 202 | CLANG_ENABLE_OBJC_WEAK = YES; 203 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 204 | CLANG_WARN_BOOL_CONVERSION = YES; 205 | CLANG_WARN_COMMA = YES; 206 | CLANG_WARN_CONSTANT_CONVERSION = YES; 207 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 208 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 209 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 210 | CLANG_WARN_EMPTY_BODY = YES; 211 | CLANG_WARN_ENUM_CONVERSION = YES; 212 | CLANG_WARN_INFINITE_RECURSION = YES; 213 | CLANG_WARN_INT_CONVERSION = YES; 214 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 215 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 216 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 217 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 218 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 219 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 220 | CLANG_WARN_STRICT_PROTOTYPES = YES; 221 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 222 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 223 | CLANG_WARN_UNREACHABLE_CODE = YES; 224 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 225 | COPY_PHASE_STRIP = NO; 226 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 227 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 228 | ENABLE_NS_ASSERTIONS = NO; 229 | ENABLE_STRICT_OBJC_MSGSEND = YES; 230 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 231 | GCC_C_LANGUAGE_STANDARD = gnu17; 232 | GCC_NO_COMMON_BLOCKS = YES; 233 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 234 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 235 | GCC_WARN_UNDECLARED_SELECTOR = YES; 236 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 237 | GCC_WARN_UNUSED_FUNCTION = YES; 238 | GCC_WARN_UNUSED_VARIABLE = YES; 239 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 240 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 241 | MTL_ENABLE_DEBUG_INFO = NO; 242 | MTL_FAST_MATH = YES; 243 | SDKROOT = iphoneos; 244 | SWIFT_COMPILATION_MODE = wholemodule; 245 | VALIDATE_PRODUCT = YES; 246 | }; 247 | name = Release; 248 | }; 249 | 8DFF5C672DFA8246004826DF /* Debug */ = { 250 | isa = XCBuildConfiguration; 251 | buildSettings = { 252 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 253 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 254 | CODE_SIGN_STYLE = Automatic; 255 | CURRENT_PROJECT_VERSION = 1; 256 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 257 | ENABLE_PREVIEWS = YES; 258 | GENERATE_INFOPLIST_FILE = YES; 259 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 260 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 261 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 262 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 263 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 264 | LD_RUNPATH_SEARCH_PATHS = ( 265 | "$(inherited)", 266 | "@executable_path/Frameworks", 267 | ); 268 | MARKETING_VERSION = 1.0; 269 | PRODUCT_BUNDLE_IDENTIFIER = com.azamsharp.Travel; 270 | PRODUCT_NAME = "$(TARGET_NAME)"; 271 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 272 | SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 273 | SWIFT_EMIT_LOC_STRINGS = YES; 274 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 275 | SWIFT_VERSION = 5.0; 276 | TARGETED_DEVICE_FAMILY = "1,2"; 277 | }; 278 | name = Debug; 279 | }; 280 | 8DFF5C682DFA8246004826DF /* Release */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 284 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 285 | CODE_SIGN_STYLE = Automatic; 286 | CURRENT_PROJECT_VERSION = 1; 287 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 288 | ENABLE_PREVIEWS = YES; 289 | GENERATE_INFOPLIST_FILE = YES; 290 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 291 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 292 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 293 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 294 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 295 | LD_RUNPATH_SEARCH_PATHS = ( 296 | "$(inherited)", 297 | "@executable_path/Frameworks", 298 | ); 299 | MARKETING_VERSION = 1.0; 300 | PRODUCT_BUNDLE_IDENTIFIER = com.azamsharp.Travel; 301 | PRODUCT_NAME = "$(TARGET_NAME)"; 302 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 303 | SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 304 | SWIFT_EMIT_LOC_STRINGS = YES; 305 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 306 | SWIFT_VERSION = 5.0; 307 | TARGETED_DEVICE_FAMILY = "1,2"; 308 | }; 309 | name = Release; 310 | }; 311 | /* End XCBuildConfiguration section */ 312 | 313 | /* Begin XCConfigurationList section */ 314 | 8DFF5C562DFA8245004826DF /* Build configuration list for PBXProject "Travel" */ = { 315 | isa = XCConfigurationList; 316 | buildConfigurations = ( 317 | 8DFF5C642DFA8246004826DF /* Debug */, 318 | 8DFF5C652DFA8246004826DF /* Release */, 319 | ); 320 | defaultConfigurationIsVisible = 0; 321 | defaultConfigurationName = Release; 322 | }; 323 | 8DFF5C662DFA8246004826DF /* Build configuration list for PBXNativeTarget "Travel" */ = { 324 | isa = XCConfigurationList; 325 | buildConfigurations = ( 326 | 8DFF5C672DFA8246004826DF /* Debug */, 327 | 8DFF5C682DFA8246004826DF /* Release */, 328 | ); 329 | defaultConfigurationIsVisible = 0; 330 | defaultConfigurationName = Release; 331 | }; 332 | /* End XCConfigurationList section */ 333 | }; 334 | rootObject = 8DFF5C532DFA8245004826DF /* Project object */; 335 | } 336 | -------------------------------------------------------------------------------- /HelloWorld/HelloWorld.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 77; 7 | objects = { 8 | 9 | /* Begin PBXFileReference section */ 10 | 8DF930952DF7D5B0005FE10B /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; }; 11 | /* End PBXFileReference section */ 12 | 13 | /* Begin PBXFileSystemSynchronizedRootGroup section */ 14 | 8DF930972DF7D5B0005FE10B /* HelloWorld */ = { 15 | isa = PBXFileSystemSynchronizedRootGroup; 16 | path = HelloWorld; 17 | sourceTree = ""; 18 | }; 19 | /* End PBXFileSystemSynchronizedRootGroup section */ 20 | 21 | /* Begin PBXFrameworksBuildPhase section */ 22 | 8DF930922DF7D5B0005FE10B /* Frameworks */ = { 23 | isa = PBXFrameworksBuildPhase; 24 | buildActionMask = 2147483647; 25 | files = ( 26 | ); 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXFrameworksBuildPhase section */ 30 | 31 | /* Begin PBXGroup section */ 32 | 8DF9308C2DF7D5B0005FE10B = { 33 | isa = PBXGroup; 34 | children = ( 35 | 8DF930972DF7D5B0005FE10B /* HelloWorld */, 36 | 8DF930962DF7D5B0005FE10B /* Products */, 37 | ); 38 | sourceTree = ""; 39 | }; 40 | 8DF930962DF7D5B0005FE10B /* Products */ = { 41 | isa = PBXGroup; 42 | children = ( 43 | 8DF930952DF7D5B0005FE10B /* HelloWorld.app */, 44 | ); 45 | name = Products; 46 | sourceTree = ""; 47 | }; 48 | /* End PBXGroup section */ 49 | 50 | /* Begin PBXNativeTarget section */ 51 | 8DF930942DF7D5B0005FE10B /* HelloWorld */ = { 52 | isa = PBXNativeTarget; 53 | buildConfigurationList = 8DF930A02DF7D5B1005FE10B /* Build configuration list for PBXNativeTarget "HelloWorld" */; 54 | buildPhases = ( 55 | 8DF930912DF7D5B0005FE10B /* Sources */, 56 | 8DF930922DF7D5B0005FE10B /* Frameworks */, 57 | 8DF930932DF7D5B0005FE10B /* Resources */, 58 | ); 59 | buildRules = ( 60 | ); 61 | dependencies = ( 62 | ); 63 | fileSystemSynchronizedGroups = ( 64 | 8DF930972DF7D5B0005FE10B /* HelloWorld */, 65 | ); 66 | name = HelloWorld; 67 | packageProductDependencies = ( 68 | ); 69 | productName = HelloWorld; 70 | productReference = 8DF930952DF7D5B0005FE10B /* HelloWorld.app */; 71 | productType = "com.apple.product-type.application"; 72 | }; 73 | /* End PBXNativeTarget section */ 74 | 75 | /* Begin PBXProject section */ 76 | 8DF9308D2DF7D5B0005FE10B /* Project object */ = { 77 | isa = PBXProject; 78 | attributes = { 79 | BuildIndependentTargetsInParallel = 1; 80 | LastSwiftUpdateCheck = 2600; 81 | LastUpgradeCheck = 2600; 82 | TargetAttributes = { 83 | 8DF930942DF7D5B0005FE10B = { 84 | CreatedOnToolsVersion = 26.0; 85 | }; 86 | }; 87 | }; 88 | buildConfigurationList = 8DF930902DF7D5B0005FE10B /* Build configuration list for PBXProject "HelloWorld" */; 89 | developmentRegion = en; 90 | hasScannedForEncodings = 0; 91 | knownRegions = ( 92 | en, 93 | Base, 94 | ); 95 | mainGroup = 8DF9308C2DF7D5B0005FE10B; 96 | minimizedProjectReferenceProxies = 1; 97 | preferredProjectObjectVersion = 77; 98 | productRefGroup = 8DF930962DF7D5B0005FE10B /* Products */; 99 | projectDirPath = ""; 100 | projectRoot = ""; 101 | targets = ( 102 | 8DF930942DF7D5B0005FE10B /* HelloWorld */, 103 | ); 104 | }; 105 | /* End PBXProject section */ 106 | 107 | /* Begin PBXResourcesBuildPhase section */ 108 | 8DF930932DF7D5B0005FE10B /* Resources */ = { 109 | isa = PBXResourcesBuildPhase; 110 | buildActionMask = 2147483647; 111 | files = ( 112 | ); 113 | runOnlyForDeploymentPostprocessing = 0; 114 | }; 115 | /* End PBXResourcesBuildPhase section */ 116 | 117 | /* Begin PBXSourcesBuildPhase section */ 118 | 8DF930912DF7D5B0005FE10B /* Sources */ = { 119 | isa = PBXSourcesBuildPhase; 120 | buildActionMask = 2147483647; 121 | files = ( 122 | ); 123 | runOnlyForDeploymentPostprocessing = 0; 124 | }; 125 | /* End PBXSourcesBuildPhase section */ 126 | 127 | /* Begin XCBuildConfiguration section */ 128 | 8DF9309E2DF7D5B1005FE10B /* Debug */ = { 129 | isa = XCBuildConfiguration; 130 | buildSettings = { 131 | ALWAYS_SEARCH_USER_PATHS = NO; 132 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 133 | CLANG_ANALYZER_NONNULL = YES; 134 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 135 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 136 | CLANG_ENABLE_MODULES = YES; 137 | CLANG_ENABLE_OBJC_ARC = YES; 138 | CLANG_ENABLE_OBJC_WEAK = YES; 139 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 140 | CLANG_WARN_BOOL_CONVERSION = YES; 141 | CLANG_WARN_COMMA = YES; 142 | CLANG_WARN_CONSTANT_CONVERSION = YES; 143 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 144 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 145 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 146 | CLANG_WARN_EMPTY_BODY = YES; 147 | CLANG_WARN_ENUM_CONVERSION = YES; 148 | CLANG_WARN_INFINITE_RECURSION = YES; 149 | CLANG_WARN_INT_CONVERSION = YES; 150 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 151 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 152 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 153 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 154 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 155 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 156 | CLANG_WARN_STRICT_PROTOTYPES = YES; 157 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 158 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 159 | CLANG_WARN_UNREACHABLE_CODE = YES; 160 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 161 | COPY_PHASE_STRIP = NO; 162 | DEBUG_INFORMATION_FORMAT = dwarf; 163 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 164 | ENABLE_STRICT_OBJC_MSGSEND = YES; 165 | ENABLE_TESTABILITY = YES; 166 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 167 | GCC_C_LANGUAGE_STANDARD = gnu17; 168 | GCC_DYNAMIC_NO_PIC = NO; 169 | GCC_NO_COMMON_BLOCKS = YES; 170 | GCC_OPTIMIZATION_LEVEL = 0; 171 | GCC_PREPROCESSOR_DEFINITIONS = ( 172 | "DEBUG=1", 173 | "$(inherited)", 174 | ); 175 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 176 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 177 | GCC_WARN_UNDECLARED_SELECTOR = YES; 178 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 179 | GCC_WARN_UNUSED_FUNCTION = YES; 180 | GCC_WARN_UNUSED_VARIABLE = YES; 181 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 182 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 183 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 184 | MTL_FAST_MATH = YES; 185 | ONLY_ACTIVE_ARCH = YES; 186 | SDKROOT = iphoneos; 187 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; 188 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 189 | }; 190 | name = Debug; 191 | }; 192 | 8DF9309F2DF7D5B1005FE10B /* Release */ = { 193 | isa = XCBuildConfiguration; 194 | buildSettings = { 195 | ALWAYS_SEARCH_USER_PATHS = NO; 196 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 197 | CLANG_ANALYZER_NONNULL = YES; 198 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 199 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 200 | CLANG_ENABLE_MODULES = YES; 201 | CLANG_ENABLE_OBJC_ARC = YES; 202 | CLANG_ENABLE_OBJC_WEAK = YES; 203 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 204 | CLANG_WARN_BOOL_CONVERSION = YES; 205 | CLANG_WARN_COMMA = YES; 206 | CLANG_WARN_CONSTANT_CONVERSION = YES; 207 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 208 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 209 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 210 | CLANG_WARN_EMPTY_BODY = YES; 211 | CLANG_WARN_ENUM_CONVERSION = YES; 212 | CLANG_WARN_INFINITE_RECURSION = YES; 213 | CLANG_WARN_INT_CONVERSION = YES; 214 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 215 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 216 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 217 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 218 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 219 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 220 | CLANG_WARN_STRICT_PROTOTYPES = YES; 221 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 222 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 223 | CLANG_WARN_UNREACHABLE_CODE = YES; 224 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 225 | COPY_PHASE_STRIP = NO; 226 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 227 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 228 | ENABLE_NS_ASSERTIONS = NO; 229 | ENABLE_STRICT_OBJC_MSGSEND = YES; 230 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 231 | GCC_C_LANGUAGE_STANDARD = gnu17; 232 | GCC_NO_COMMON_BLOCKS = YES; 233 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 234 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 235 | GCC_WARN_UNDECLARED_SELECTOR = YES; 236 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 237 | GCC_WARN_UNUSED_FUNCTION = YES; 238 | GCC_WARN_UNUSED_VARIABLE = YES; 239 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 240 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 241 | MTL_ENABLE_DEBUG_INFO = NO; 242 | MTL_FAST_MATH = YES; 243 | SDKROOT = iphoneos; 244 | SWIFT_COMPILATION_MODE = wholemodule; 245 | VALIDATE_PRODUCT = YES; 246 | }; 247 | name = Release; 248 | }; 249 | 8DF930A12DF7D5B1005FE10B /* Debug */ = { 250 | isa = XCBuildConfiguration; 251 | buildSettings = { 252 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 253 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 254 | CODE_SIGN_STYLE = Automatic; 255 | CURRENT_PROJECT_VERSION = 1; 256 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 257 | ENABLE_PREVIEWS = YES; 258 | GENERATE_INFOPLIST_FILE = YES; 259 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 260 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 261 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 262 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 263 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 264 | LD_RUNPATH_SEARCH_PATHS = ( 265 | "$(inherited)", 266 | "@executable_path/Frameworks", 267 | ); 268 | MARKETING_VERSION = 1.0; 269 | PRODUCT_BUNDLE_IDENTIFIER = com.azamsharp.HelloWorld; 270 | PRODUCT_NAME = "$(TARGET_NAME)"; 271 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 272 | SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 273 | SWIFT_EMIT_LOC_STRINGS = YES; 274 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 275 | SWIFT_VERSION = 5.0; 276 | TARGETED_DEVICE_FAMILY = "1,2"; 277 | }; 278 | name = Debug; 279 | }; 280 | 8DF930A22DF7D5B1005FE10B /* Release */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 284 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 285 | CODE_SIGN_STYLE = Automatic; 286 | CURRENT_PROJECT_VERSION = 1; 287 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 288 | ENABLE_PREVIEWS = YES; 289 | GENERATE_INFOPLIST_FILE = YES; 290 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 291 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 292 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 293 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 294 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 295 | LD_RUNPATH_SEARCH_PATHS = ( 296 | "$(inherited)", 297 | "@executable_path/Frameworks", 298 | ); 299 | MARKETING_VERSION = 1.0; 300 | PRODUCT_BUNDLE_IDENTIFIER = com.azamsharp.HelloWorld; 301 | PRODUCT_NAME = "$(TARGET_NAME)"; 302 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 303 | SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 304 | SWIFT_EMIT_LOC_STRINGS = YES; 305 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 306 | SWIFT_VERSION = 5.0; 307 | TARGETED_DEVICE_FAMILY = "1,2"; 308 | }; 309 | name = Release; 310 | }; 311 | /* End XCBuildConfiguration section */ 312 | 313 | /* Begin XCConfigurationList section */ 314 | 8DF930902DF7D5B0005FE10B /* Build configuration list for PBXProject "HelloWorld" */ = { 315 | isa = XCConfigurationList; 316 | buildConfigurations = ( 317 | 8DF9309E2DF7D5B1005FE10B /* Debug */, 318 | 8DF9309F2DF7D5B1005FE10B /* Release */, 319 | ); 320 | defaultConfigurationIsVisible = 0; 321 | defaultConfigurationName = Release; 322 | }; 323 | 8DF930A02DF7D5B1005FE10B /* Build configuration list for PBXNativeTarget "HelloWorld" */ = { 324 | isa = XCConfigurationList; 325 | buildConfigurations = ( 326 | 8DF930A12DF7D5B1005FE10B /* Debug */, 327 | 8DF930A22DF7D5B1005FE10B /* Release */, 328 | ); 329 | defaultConfigurationIsVisible = 0; 330 | defaultConfigurationName = Release; 331 | }; 332 | /* End XCConfigurationList section */ 333 | }; 334 | rootObject = 8DF9308D2DF7D5B0005FE10B /* Project object */; 335 | } 336 | -------------------------------------------------------------------------------- /SwiftExams/SwiftExams.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 77; 7 | objects = { 8 | 9 | /* Begin PBXFileReference section */ 10 | 8DCD9A2C2E089529005ED69B /* SwiftExams.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftExams.app; sourceTree = BUILT_PRODUCTS_DIR; }; 11 | /* End PBXFileReference section */ 12 | 13 | /* Begin PBXFileSystemSynchronizedRootGroup section */ 14 | 8DCD9A2E2E089529005ED69B /* SwiftExams */ = { 15 | isa = PBXFileSystemSynchronizedRootGroup; 16 | path = SwiftExams; 17 | sourceTree = ""; 18 | }; 19 | /* End PBXFileSystemSynchronizedRootGroup section */ 20 | 21 | /* Begin PBXFrameworksBuildPhase section */ 22 | 8DCD9A292E089529005ED69B /* Frameworks */ = { 23 | isa = PBXFrameworksBuildPhase; 24 | buildActionMask = 2147483647; 25 | files = ( 26 | ); 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXFrameworksBuildPhase section */ 30 | 31 | /* Begin PBXGroup section */ 32 | 8DCD9A232E089529005ED69B = { 33 | isa = PBXGroup; 34 | children = ( 35 | 8DCD9A2E2E089529005ED69B /* SwiftExams */, 36 | 8DCD9A2D2E089529005ED69B /* Products */, 37 | ); 38 | sourceTree = ""; 39 | }; 40 | 8DCD9A2D2E089529005ED69B /* Products */ = { 41 | isa = PBXGroup; 42 | children = ( 43 | 8DCD9A2C2E089529005ED69B /* SwiftExams.app */, 44 | ); 45 | name = Products; 46 | sourceTree = ""; 47 | }; 48 | /* End PBXGroup section */ 49 | 50 | /* Begin PBXNativeTarget section */ 51 | 8DCD9A2B2E089529005ED69B /* SwiftExams */ = { 52 | isa = PBXNativeTarget; 53 | buildConfigurationList = 8DCD9A372E08952B005ED69B /* Build configuration list for PBXNativeTarget "SwiftExams" */; 54 | buildPhases = ( 55 | 8DCD9A282E089529005ED69B /* Sources */, 56 | 8DCD9A292E089529005ED69B /* Frameworks */, 57 | 8DCD9A2A2E089529005ED69B /* Resources */, 58 | ); 59 | buildRules = ( 60 | ); 61 | dependencies = ( 62 | ); 63 | fileSystemSynchronizedGroups = ( 64 | 8DCD9A2E2E089529005ED69B /* SwiftExams */, 65 | ); 66 | name = SwiftExams; 67 | packageProductDependencies = ( 68 | ); 69 | productName = SwiftExams; 70 | productReference = 8DCD9A2C2E089529005ED69B /* SwiftExams.app */; 71 | productType = "com.apple.product-type.application"; 72 | }; 73 | /* End PBXNativeTarget section */ 74 | 75 | /* Begin PBXProject section */ 76 | 8DCD9A242E089529005ED69B /* Project object */ = { 77 | isa = PBXProject; 78 | attributes = { 79 | BuildIndependentTargetsInParallel = 1; 80 | LastSwiftUpdateCheck = 2600; 81 | LastUpgradeCheck = 2600; 82 | TargetAttributes = { 83 | 8DCD9A2B2E089529005ED69B = { 84 | CreatedOnToolsVersion = 26.0; 85 | }; 86 | }; 87 | }; 88 | buildConfigurationList = 8DCD9A272E089529005ED69B /* Build configuration list for PBXProject "SwiftExams" */; 89 | developmentRegion = en; 90 | hasScannedForEncodings = 0; 91 | knownRegions = ( 92 | en, 93 | Base, 94 | ); 95 | mainGroup = 8DCD9A232E089529005ED69B; 96 | minimizedProjectReferenceProxies = 1; 97 | preferredProjectObjectVersion = 77; 98 | productRefGroup = 8DCD9A2D2E089529005ED69B /* Products */; 99 | projectDirPath = ""; 100 | projectRoot = ""; 101 | targets = ( 102 | 8DCD9A2B2E089529005ED69B /* SwiftExams */, 103 | ); 104 | }; 105 | /* End PBXProject section */ 106 | 107 | /* Begin PBXResourcesBuildPhase section */ 108 | 8DCD9A2A2E089529005ED69B /* Resources */ = { 109 | isa = PBXResourcesBuildPhase; 110 | buildActionMask = 2147483647; 111 | files = ( 112 | ); 113 | runOnlyForDeploymentPostprocessing = 0; 114 | }; 115 | /* End PBXResourcesBuildPhase section */ 116 | 117 | /* Begin PBXSourcesBuildPhase section */ 118 | 8DCD9A282E089529005ED69B /* Sources */ = { 119 | isa = PBXSourcesBuildPhase; 120 | buildActionMask = 2147483647; 121 | files = ( 122 | ); 123 | runOnlyForDeploymentPostprocessing = 0; 124 | }; 125 | /* End PBXSourcesBuildPhase section */ 126 | 127 | /* Begin XCBuildConfiguration section */ 128 | 8DCD9A352E08952B005ED69B /* Debug */ = { 129 | isa = XCBuildConfiguration; 130 | buildSettings = { 131 | ALWAYS_SEARCH_USER_PATHS = NO; 132 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 133 | CLANG_ANALYZER_NONNULL = YES; 134 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 135 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 136 | CLANG_ENABLE_MODULES = YES; 137 | CLANG_ENABLE_OBJC_ARC = YES; 138 | CLANG_ENABLE_OBJC_WEAK = YES; 139 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 140 | CLANG_WARN_BOOL_CONVERSION = YES; 141 | CLANG_WARN_COMMA = YES; 142 | CLANG_WARN_CONSTANT_CONVERSION = YES; 143 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 144 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 145 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 146 | CLANG_WARN_EMPTY_BODY = YES; 147 | CLANG_WARN_ENUM_CONVERSION = YES; 148 | CLANG_WARN_INFINITE_RECURSION = YES; 149 | CLANG_WARN_INT_CONVERSION = YES; 150 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 151 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 152 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 153 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 154 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 155 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 156 | CLANG_WARN_STRICT_PROTOTYPES = YES; 157 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 158 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 159 | CLANG_WARN_UNREACHABLE_CODE = YES; 160 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 161 | COPY_PHASE_STRIP = NO; 162 | DEBUG_INFORMATION_FORMAT = dwarf; 163 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 164 | ENABLE_STRICT_OBJC_MSGSEND = YES; 165 | ENABLE_TESTABILITY = YES; 166 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 167 | GCC_C_LANGUAGE_STANDARD = gnu17; 168 | GCC_DYNAMIC_NO_PIC = NO; 169 | GCC_NO_COMMON_BLOCKS = YES; 170 | GCC_OPTIMIZATION_LEVEL = 0; 171 | GCC_PREPROCESSOR_DEFINITIONS = ( 172 | "DEBUG=1", 173 | "$(inherited)", 174 | ); 175 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 176 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 177 | GCC_WARN_UNDECLARED_SELECTOR = YES; 178 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 179 | GCC_WARN_UNUSED_FUNCTION = YES; 180 | GCC_WARN_UNUSED_VARIABLE = YES; 181 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 182 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 183 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 184 | MTL_FAST_MATH = YES; 185 | ONLY_ACTIVE_ARCH = YES; 186 | SDKROOT = iphoneos; 187 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; 188 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 189 | }; 190 | name = Debug; 191 | }; 192 | 8DCD9A362E08952B005ED69B /* Release */ = { 193 | isa = XCBuildConfiguration; 194 | buildSettings = { 195 | ALWAYS_SEARCH_USER_PATHS = NO; 196 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 197 | CLANG_ANALYZER_NONNULL = YES; 198 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 199 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 200 | CLANG_ENABLE_MODULES = YES; 201 | CLANG_ENABLE_OBJC_ARC = YES; 202 | CLANG_ENABLE_OBJC_WEAK = YES; 203 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 204 | CLANG_WARN_BOOL_CONVERSION = YES; 205 | CLANG_WARN_COMMA = YES; 206 | CLANG_WARN_CONSTANT_CONVERSION = YES; 207 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 208 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 209 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 210 | CLANG_WARN_EMPTY_BODY = YES; 211 | CLANG_WARN_ENUM_CONVERSION = YES; 212 | CLANG_WARN_INFINITE_RECURSION = YES; 213 | CLANG_WARN_INT_CONVERSION = YES; 214 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 215 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 216 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 217 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 218 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 219 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 220 | CLANG_WARN_STRICT_PROTOTYPES = YES; 221 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 222 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 223 | CLANG_WARN_UNREACHABLE_CODE = YES; 224 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 225 | COPY_PHASE_STRIP = NO; 226 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 227 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 228 | ENABLE_NS_ASSERTIONS = NO; 229 | ENABLE_STRICT_OBJC_MSGSEND = YES; 230 | ENABLE_USER_SCRIPT_SANDBOXING = YES; 231 | GCC_C_LANGUAGE_STANDARD = gnu17; 232 | GCC_NO_COMMON_BLOCKS = YES; 233 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 234 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 235 | GCC_WARN_UNDECLARED_SELECTOR = YES; 236 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 237 | GCC_WARN_UNUSED_FUNCTION = YES; 238 | GCC_WARN_UNUSED_VARIABLE = YES; 239 | IPHONEOS_DEPLOYMENT_TARGET = 26.0; 240 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 241 | MTL_ENABLE_DEBUG_INFO = NO; 242 | MTL_FAST_MATH = YES; 243 | SDKROOT = iphoneos; 244 | SWIFT_COMPILATION_MODE = wholemodule; 245 | VALIDATE_PRODUCT = YES; 246 | }; 247 | name = Release; 248 | }; 249 | 8DCD9A382E08952B005ED69B /* Debug */ = { 250 | isa = XCBuildConfiguration; 251 | buildSettings = { 252 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 253 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 254 | CODE_SIGN_STYLE = Automatic; 255 | CURRENT_PROJECT_VERSION = 1; 256 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 257 | ENABLE_PREVIEWS = YES; 258 | GENERATE_INFOPLIST_FILE = YES; 259 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 260 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 261 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 262 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 263 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 264 | LD_RUNPATH_SEARCH_PATHS = ( 265 | "$(inherited)", 266 | "@executable_path/Frameworks", 267 | ); 268 | MARKETING_VERSION = 1.0; 269 | PRODUCT_BUNDLE_IDENTIFIER = com.azamsharp.SwiftExams; 270 | PRODUCT_NAME = "$(TARGET_NAME)"; 271 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 272 | SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 273 | SWIFT_EMIT_LOC_STRINGS = YES; 274 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 275 | SWIFT_VERSION = 5.0; 276 | TARGETED_DEVICE_FAMILY = "1,2"; 277 | }; 278 | name = Debug; 279 | }; 280 | 8DCD9A392E08952B005ED69B /* Release */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 284 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 285 | CODE_SIGN_STYLE = Automatic; 286 | CURRENT_PROJECT_VERSION = 1; 287 | DEVELOPMENT_TEAM = B2Q8EGNCQA; 288 | ENABLE_PREVIEWS = YES; 289 | GENERATE_INFOPLIST_FILE = YES; 290 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 291 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 292 | INFOPLIST_KEY_UILaunchScreen_Generation = YES; 293 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 294 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 295 | LD_RUNPATH_SEARCH_PATHS = ( 296 | "$(inherited)", 297 | "@executable_path/Frameworks", 298 | ); 299 | MARKETING_VERSION = 1.0; 300 | PRODUCT_BUNDLE_IDENTIFIER = com.azamsharp.SwiftExams; 301 | PRODUCT_NAME = "$(TARGET_NAME)"; 302 | STRING_CATALOG_GENERATE_SYMBOLS = YES; 303 | SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 304 | SWIFT_EMIT_LOC_STRINGS = YES; 305 | SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 306 | SWIFT_VERSION = 5.0; 307 | TARGETED_DEVICE_FAMILY = "1,2"; 308 | }; 309 | name = Release; 310 | }; 311 | /* End XCBuildConfiguration section */ 312 | 313 | /* Begin XCConfigurationList section */ 314 | 8DCD9A272E089529005ED69B /* Build configuration list for PBXProject "SwiftExams" */ = { 315 | isa = XCConfigurationList; 316 | buildConfigurations = ( 317 | 8DCD9A352E08952B005ED69B /* Debug */, 318 | 8DCD9A362E08952B005ED69B /* Release */, 319 | ); 320 | defaultConfigurationIsVisible = 0; 321 | defaultConfigurationName = Release; 322 | }; 323 | 8DCD9A372E08952B005ED69B /* Build configuration list for PBXNativeTarget "SwiftExams" */ = { 324 | isa = XCConfigurationList; 325 | buildConfigurations = ( 326 | 8DCD9A382E08952B005ED69B /* Debug */, 327 | 8DCD9A392E08952B005ED69B /* Release */, 328 | ); 329 | defaultConfigurationIsVisible = 0; 330 | defaultConfigurationName = Release; 331 | }; 332 | /* End XCConfigurationList section */ 333 | }; 334 | rootObject = 8DCD9A242E089529005ED69B /* Project object */; 335 | } 336 | --------------------------------------------------------------------------------