Brunobkr/llama.cpp_AlgMor24_github
ΩFFFΣLLIa • llama.cpp • AlgMor24 ██████╗ ███████╗███████╗███████╗██╗ ██╗ ██╗ █████╗ ██╔═══██╗██╔════╝██╔════╝██╔════╝██║ ██║ ██║██╔══██╗ ██║ ██║█████╗ █████╗ █████╗ ██║ ██║ ██║███████║ ██║ ██║██╔══╝ ██╔══╝ ██╔══╝ ██║ ██║ ██║██╔══██║ ╚██████╔╝██║ ██║ ███████╗███████╗███████╗██║██║ ██║ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚══════╝╚═╝╚═╝ ╚═╝ High-Performance LLM / VLM Inference & Autonomous Agentic Ecosystem… See the full description on the dataset page: https://huggingface.co/datasets/Brunobkr/llama.cpp_AlgMor24_github.
03.1k
1#!/usr/bin/env bash2# validate-macos.sh - Validate macOS Application with embedded llama.xcframework using SwiftUI3 4# Authentication options (optional) (can be set via environment variables)5# To use: export APPLE_ID=your.email@example.com6# export APPLE_PASSWORD=your-app-specific-password7# ./validate-macos.sh8APPLE_ID=${APPLE_ID:-""}9APPLE_PASSWORD=${APPLE_PASSWORD:-""}10 11# Ensure the script exits on error12set -e13 14# Function to print usage instructions15print_usage() {16 echo "Usage: ./validate-macos.sh [OPTIONS]"17 echo ""18 echo "Options:"19 echo " --help Show this help message"20 echo " --apple-id EMAIL Apple ID email for validation"21 echo " --apple-password PWD App-specific password for Apple ID"22 echo ""23 echo "Environment variables:"24 echo " APPLE_ID Apple ID email for validation"25 echo " APPLE_PASSWORD App-specific password for Apple ID"26 echo ""27 echo "Notes:"28 echo " - Command line options take precedence over environment variables"29 echo " - Authentication is optional. If not provided, alternative validation will be performed"30 echo " - For APPLE_PASSWORD, use an app-specific password generated at https://appleid.apple.com/account/manage"31}32 33# Parse command line arguments34while [[ $# -gt 0 ]]; do35 case $1 in36 --help)37 print_usage38 exit 039 ;;40 --apple-id)41 APPLE_ID="$2"42 shift 243 ;;44 --apple-password)45 APPLE_PASSWORD="$2"46 shift 247 ;;48 *)49 echo "Unknown option: $1"50 print_usage51 exit 152 ;;53 esac54done55 56# Function to clean up in case of error57cleanup() {58 # Don't clean up temp files on error to help with debugging59 echo "===== macOS Validation Process Failed ====="60 exit 161}62 63# Set up trap to call cleanup function on error64trap cleanup ERR65 66set -e # Exit on any error67 68ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../.." && pwd )"69BUILD_DIR="${ROOT_DIR}/validation-builds/ios"70 71# Configuration72APP_NAME="MacOSLlamaTest"73BUNDLE_ID="org.ggml.MacOSLlamaTest"74XCFRAMEWORK_PATH="${ROOT_DIR}/build-apple/llama.xcframework"75TEMP_DIR="${BUILD_DIR}/temp"76ARCHIVE_PATH="${BUILD_DIR}/${APP_NAME}.xcarchive"77APP_PATH="${BUILD_DIR}/${APP_NAME}.app"78ZIP_PATH="${BUILD_DIR}/${APP_NAME}.zip"79VALIDATION_DIR="${BUILD_DIR}/validation"80 81# Create necessary directories82mkdir -p "${BUILD_DIR}"83mkdir -p "${TEMP_DIR}"84mkdir -p "${VALIDATION_DIR}"85 86echo "===== macOS Validation Process Started ====="87 88# 1. Create a simple test app project89echo "Creating test macOS app project..."90mkdir -p "${TEMP_DIR}/${APP_NAME}/${APP_NAME}"91cat > "${TEMP_DIR}/${APP_NAME}/${APP_NAME}/Info.plist" << EOF92<?xml version="1.0" encoding="UTF-8"?>93<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">94<plist version="1.0">95<dict>96 <key>CFBundleDevelopmentRegion</key>97 <string>en</string>98 <key>CFBundleExecutable</key>99 <string>${APP_NAME}</string>100 <key>CFBundleIdentifier</key>101 <string>${BUNDLE_ID}</string>102 <key>CFBundleInfoDictionaryVersion</key>103 <string>6.0</string>104 <key>CFBundleName</key>105 <string>${APP_NAME}</string>106 <key>CFBundlePackageType</key>107 <string>APPL</string>108 <key>CFBundleShortVersionString</key>109 <string>1.0</string>110 <key>CFBundleVersion</key>111 <string>1</string>112 <key>LSMinimumSystemVersion</key>113 <string>12.0</string>114 <key>NSHumanReadableCopyright</key>115 <string>Copyright © 2025 GGML. All rights reserved.</string>116 <key>NSPrincipalClass</key>117 <string>NSApplication</string>118</dict>119</plist>120EOF121 122# Create SwiftUI app files123mkdir -p "${TEMP_DIR}/${APP_NAME}/${APP_NAME}/Sources"124 125# Create App.swift126cat > "${TEMP_DIR}/${APP_NAME}/${APP_NAME}/Sources/App.swift" << EOF127import SwiftUI128import llama129 130@main131struct LlamaTestApp: App {132 var body: some Scene {133 WindowGroup {134 ContentView()135 }136 }137}138EOF139 140# Create ContentView.swift with macOS specific elements141cat > "${TEMP_DIR}/${APP_NAME}/${APP_NAME}/Sources/ContentView.swift" << EOF142import SwiftUI143import llama144 145struct ContentView: View {146 // Test that we can initialize a llama context params struct147 let params = llama_context_default_params()148 149 var body: some View {150 VStack(spacing: 20) {151 Text("Llama Framework Test on macOS")152 .font(.largeTitle)153 .padding()154 155 Text("llama_context_default_params() created successfully")156 .font(.headline)157 .multilineTextAlignment(.center)158 .padding()159 160 // Display some param values to confirm the framework is working161 Text("n_ctx: \(params.n_ctx)")162 .font(.body)163 164 Text("n_batch: \(params.n_batch)")165 .font(.body)166 167 Spacer()168 }169 .padding()170 .frame(width: 600, height: 400)171 }172}173 174struct ContentView_Previews: PreviewProvider {175 static var previews: some View {176 ContentView()177 }178}179EOF180 181# Create project.pbxproj, fixing the framework search paths issues182mkdir -p "${TEMP_DIR}/${APP_NAME}/${APP_NAME}.xcodeproj"183cat > "${TEMP_DIR}/${APP_NAME}/${APP_NAME}.xcodeproj/project.pbxproj" << 'EOF'184// !$*UTF8*$!185{186 archiveVersion = 1;187 classes = {188 };189 objectVersion = 54;190 objects = {191 192/* Begin PBXBuildFile section */193 11111111111111111111111 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22222222222222222222222; };194 33333333333333333333333 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44444444444444444444444; };195 55555555555555555555555 /* llama.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66666666666666666666666; };196 77777777777777777777777 /* llama.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 66666666666666666666666; };197/* End PBXBuildFile section */198 199/* Begin PBXCopyFilesBuildPhase section */200 88888888888888888888888 /* Embed Frameworks */ = {201 isa = PBXCopyFilesBuildPhase;202 buildActionMask = 2147483647;203 dstPath = "";204 dstSubfolderSpec = 10;205 files = (206 77777777777777777777777 /* llama.xcframework in Embed Frameworks */,207 );208 name = "Embed Frameworks";209 runOnlyForDeploymentPostprocessing = 0;210 };211/* End PBXCopyFilesBuildPhase section */212 213/* Begin PBXFileReference section */214EOF215 216# Continue with the project.pbxproj file, using the APP_NAME variable appropriately217cat >> "${TEMP_DIR}/${APP_NAME}/${APP_NAME}.xcodeproj/project.pbxproj" << EOF218 99999999999999999999999 /* ${APP_NAME}.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "${APP_NAME}.app"; sourceTree = BUILT_PRODUCTS_DIR; };219 22222222222222222222222 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; };220 44444444444444444444444 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };221 AAAAAAAAAAAAAAAAAAAAAAA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };222 66666666666666666666666 /* llama.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = llama.xcframework; sourceTree = "<group>"; };223/* End PBXFileReference section */224EOF225 226# Add the rest of the project file with fixed framework search paths227cat >> "${TEMP_DIR}/${APP_NAME}/${APP_NAME}.xcodeproj/project.pbxproj" << 'EOF'228/* Begin PBXFrameworksBuildPhase section */229 BBBBBBBBBBBBBBBBBBBBBBBB /* Frameworks */ = {230 isa = PBXFrameworksBuildPhase;231 buildActionMask = 2147483647;232 files = (233 55555555555555555555555 /* llama.xcframework in Frameworks */,234 );235 runOnlyForDeploymentPostprocessing = 0;236 };237/* End PBXFrameworksBuildPhase section */238 239/* Begin PBXGroup section */240EOF241 242# Continue with the project.pbxproj file, using the APP_NAME variable appropriately243cat >> "${TEMP_DIR}/${APP_NAME}/${APP_NAME}.xcodeproj/project.pbxproj" << EOF244 CCCCCCCCCCCCCCCCCCCCCCCC /* Products */ = {245 isa = PBXGroup;246 children = (247 99999999999999999999999 /* ${APP_NAME}.app */,248 );249 name = Products;250 sourceTree = "<group>";251 };252EOF253 254cat >> "${TEMP_DIR}/${APP_NAME}/${APP_NAME}.xcodeproj/project.pbxproj" << 'EOF'255 DDDDDDDDDDDDDDDDDDDDDDDD /* Frameworks */ = {256 isa = PBXGroup;257 children = (258 66666666666666666666666 /* llama.xcframework */,259 );260 name = Frameworks;261 sourceTree = "<group>";262 };263 EEEEEEEEEEEEEEEEEEEEEEEE = {264 isa = PBXGroup;265 children = (266 FFFFFFFFFFFFFFFFFFFFFFFF /* MacOSLlamaTest */,267 CCCCCCCCCCCCCCCCCCCCCCCC /* Products */,268 DDDDDDDDDDDDDDDDDDDDDDDD /* Frameworks */,269 );270 sourceTree = "<group>";271 };272 FFFFFFFFFFFFFFFFFFFFFFFF /* MacOSLlamaTest */ = {273 isa = PBXGroup;274 children = (275 1111111111111111111111AA /* Sources */,276 AAAAAAAAAAAAAAAAAAAAAAA /* Info.plist */,277 );278 path = "MacOSLlamaTest";279 sourceTree = "<group>";280 };281 1111111111111111111111AA /* Sources */ = {282 isa = PBXGroup;283 children = (284 22222222222222222222222 /* App.swift */,285 44444444444444444444444 /* ContentView.swift */,286 );287 path = Sources;288 sourceTree = "<group>";289 };290/* End PBXGroup section */291EOF292 293# Continue with the project.pbxproj file, using the APP_NAME variable appropriately294cat >> "${TEMP_DIR}/${APP_NAME}/${APP_NAME}.xcodeproj/project.pbxproj" << EOF295/* Begin PBXNativeTarget section */296 3333333333333333333333AA /* ${APP_NAME} */ = {297 isa = PBXNativeTarget;298 buildConfigurationList = 4444444444444444444444AA /* Build configuration list for PBXNativeTarget "${APP_NAME}" */;299 buildPhases = (300 5555555555555555555555AA /* Sources */,301 BBBBBBBBBBBBBBBBBBBBBBBB /* Frameworks */,302 6666666666666666666666AA /* Resources */,303 88888888888888888888888 /* Embed Frameworks */,304 );305 buildRules = (306 );307 dependencies = (308 );309 name = "${APP_NAME}";310 productName = "${APP_NAME}";311 productReference = 99999999999999999999999 /* ${APP_NAME}.app */;312 productType = "com.apple.product-type.application";313 };314/* End PBXNativeTarget section */315 316/* Begin PBXProject section */317 7777777777777777777777AA /* Project object */ = {318 isa = PBXProject;319 attributes = {320 LastSwiftUpdateCheck = 1240;321 LastUpgradeCheck = 1240;322 TargetAttributes = {323 3333333333333333333333AA = {324 CreatedOnToolsVersion = 12.4;325 };326 };327 };328 buildConfigurationList = 8888888888888888888888AA /* Build configuration list for PBXProject "${APP_NAME}" */;329 compatibilityVersion = "Xcode 12.0";330 developmentRegion = en;331 hasScannedForEncodings = 0;332 knownRegions = (333 en,334 Base,335 );336 mainGroup = EEEEEEEEEEEEEEEEEEEEEEEE;337 productRefGroup = CCCCCCCCCCCCCCCCCCCCCCCC /* Products */;338 projectDirPath = "";339 projectRoot = "";340 targets = (341 3333333333333333333333AA /* ${APP_NAME} */,342 );343 };344/* End PBXProject section */345EOF346 347# Add the rest of the file with correct FRAMEWORK_SEARCH_PATHS and macOS settings348cat >> "${TEMP_DIR}/${APP_NAME}/${APP_NAME}.xcodeproj/project.pbxproj" << 'EOF'349/* Begin PBXResourcesBuildPhase section */350 6666666666666666666666AA /* Resources */ = {351 isa = PBXResourcesBuildPhase;352 buildActionMask = 2147483647;353 files = (354 );355 runOnlyForDeploymentPostprocessing = 0;356 };357/* End PBXResourcesBuildPhase section */358 359/* Begin PBXSourcesBuildPhase section */360 5555555555555555555555AA /* Sources */ = {361 isa = PBXSourcesBuildPhase;362 buildActionMask = 2147483647;363 files = (364 33333333333333333333333 /* ContentView.swift in Sources */,365 11111111111111111111111 /* App.swift in Sources */,366 );367 runOnlyForDeploymentPostprocessing = 0;368 };369/* End PBXSourcesBuildPhase section */370 371/* Begin XCBuildConfiguration section */372 9999999999999999999999AA /* Debug */ = {373 isa = XCBuildConfiguration;374 buildSettings = {375 ALWAYS_SEARCH_USER_PATHS = NO;376 CLANG_ANALYZER_NONNULL = YES;377 CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;378 CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";379 CLANG_CXX_LIBRARY = "libc++";380 CLANG_ENABLE_MODULES = YES;381 CLANG_ENABLE_OBJC_ARC = YES;382 CLANG_ENABLE_OBJC_WEAK = YES;383 CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;384 CLANG_WARN_BOOL_CONVERSION = YES;385 CLANG_WARN_COMMA = YES;386 CLANG_WARN_CONSTANT_CONVERSION = YES;387 CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;388 CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;389 CLANG_WARN_DOCUMENTATION_COMMENTS = YES;390 CLANG_WARN_EMPTY_BODY = YES;391 CLANG_WARN_ENUM_CONVERSION = YES;392 CLANG_WARN_INFINITE_RECURSION = YES;393 CLANG_WARN_INT_CONVERSION = YES;394 CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;395 CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;396 CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;397 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;398 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;399 CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;400 CLANG_WARN_STRICT_PROTOTYPES = YES;401 CLANG_WARN_SUSPICIOUS_MOVE = YES;402 CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;403 CLANG_WARN_UNREACHABLE_CODE = YES;404 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;405 COPY_PHASE_STRIP = NO;406 DEBUG_INFORMATION_FORMAT = dwarf;407 ENABLE_STRICT_OBJC_MSGSEND = YES;408 ENABLE_TESTABILITY = YES;409 GCC_C_LANGUAGE_STANDARD = gnu11;410 GCC_DYNAMIC_NO_PIC = NO;411 GCC_NO_COMMON_BLOCKS = YES;412 GCC_OPTIMIZATION_LEVEL = 0;413 GCC_PREPROCESSOR_DEFINITIONS = (414 "DEBUG=1",415 "$(inherited)",416 );417 GCC_WARN_64_TO_32_BIT_CONVERSION = YES;418 GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;419 GCC_WARN_UNDECLARED_SELECTOR = YES;420 GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;421 GCC_WARN_UNUSED_FUNCTION = YES;422 GCC_WARN_UNUSED_VARIABLE = YES;423 MACOSX_DEPLOYMENT_TARGET = 12.0;424 MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;425 MTL_FAST_MATH = YES;426 ONLY_ACTIVE_ARCH = YES;427 SDKROOT = macosx;428 SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;429 SWIFT_OPTIMIZATION_LEVEL = "-Onone";430 };431 name = Debug;432 };433 AAAAAAAAAAAAAAAAAAAAABBB /* Release */ = {434 isa = XCBuildConfiguration;435 buildSettings = {436 ALWAYS_SEARCH_USER_PATHS = NO;437 CLANG_ANALYZER_NONNULL = YES;438 CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;439 CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";440 CLANG_CXX_LIBRARY = "libc++";441 CLANG_ENABLE_MODULES = YES;442 CLANG_ENABLE_OBJC_ARC = YES;443 CLANG_ENABLE_OBJC_WEAK = YES;444 CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;445 CLANG_WARN_BOOL_CONVERSION = YES;446 CLANG_WARN_COMMA = YES;447 CLANG_WARN_CONSTANT_CONVERSION = YES;448 CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;449 CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;450 CLANG_WARN_DOCUMENTATION_COMMENTS = YES;451 CLANG_WARN_EMPTY_BODY = YES;452 CLANG_WARN_ENUM_CONVERSION = YES;453 CLANG_WARN_INFINITE_RECURSION = YES;454 CLANG_WARN_INT_CONVERSION = YES;455 CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;456 CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;457 CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;458 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;459 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;460 CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;461 CLANG_WARN_STRICT_PROTOTYPES = YES;462 CLANG_WARN_SUSPICIOUS_MOVE = YES;463 CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;464 CLANG_WARN_UNREACHABLE_CODE = YES;465 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;466 COPY_PHASE_STRIP = NO;467 DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";468 ENABLE_NS_ASSERTIONS = NO;469 ENABLE_STRICT_OBJC_MSGSEND = YES;470 GCC_C_LANGUAGE_STANDARD = gnu11;471 GCC_NO_COMMON_BLOCKS = YES;472 GCC_WARN_64_TO_32_BIT_CONVERSION = YES;473 GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;474 GCC_WARN_UNDECLARED_SELECTOR = YES;475 GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;476 GCC_WARN_UNUSED_FUNCTION = YES;477 GCC_WARN_UNUSED_VARIABLE = YES;478 MACOSX_DEPLOYMENT_TARGET = 12.0;479 MTL_ENABLE_DEBUG_INFO = NO;480 MTL_FAST_MATH = YES;481 SDKROOT = macosx;482 SWIFT_COMPILATION_MODE = wholemodule;483 SWIFT_OPTIMIZATION_LEVEL = "-O";484 };485 name = Release;486 };487 BBBBBBBBBBBBBBBBBBBBBBCCC /* Debug */ = {488 isa = XCBuildConfiguration;489 buildSettings = {490 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;491 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;492 CODE_SIGN_STYLE = Manual;493 COMBINE_HIDPI_IMAGES = YES;494 DEVELOPMENT_TEAM = "";495 ENABLE_HARDENED_RUNTIME = YES;496 ENABLE_PREVIEWS = YES;497 FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)";498 INFOPLIST_FILE = "MacOSLlamaTest/Info.plist";499 LD_RUNPATH_SEARCH_PATHS = (500 "$(inherited)",501 "@executable_path/../Frameworks",502 );503 PRODUCT_BUNDLE_IDENTIFIER = "org.ggml.MacOSLlamaTest";504 PRODUCT_NAME = "$(TARGET_NAME)";505 PROVISIONING_PROFILE_SPECIFIER = "";506 SWIFT_VERSION = 5.0;507 };508 name = Debug;509 };510 CCCCCCCCCCCCCCCCCCCCCCDDD /* Release */ = {511 isa = XCBuildConfiguration;512 buildSettings = {513 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;514 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;515 CODE_SIGN_STYLE = Manual;516 COMBINE_HIDPI_IMAGES = YES;517 DEVELOPMENT_TEAM = "";518 ENABLE_HARDENED_RUNTIME = YES;519 ENABLE_PREVIEWS = YES;520 FRAMEWORK_SEARCH_PATHS = (521 "$(inherited)",522 "$(PROJECT_DIR)",523 );524 INFOPLIST_FILE = "MacOSLlamaTest/Info.plist";525 LD_RUNPATH_SEARCH_PATHS = (526 "$(inherited)",527 "@executable_path/../Frameworks",528 );529 PRODUCT_BUNDLE_IDENTIFIER = "org.ggml.MacOSLlamaTest";530 PRODUCT_NAME = "$(TARGET_NAME)";531 PROVISIONING_PROFILE_SPECIFIER = "";532 SWIFT_VERSION = 5.0;533 };534 name = Release;535 };536/* End XCBuildConfiguration section */537EOF538 539# Finish the project.pbxproj file540cat >> "${TEMP_DIR}/${APP_NAME}/${APP_NAME}.xcodeproj/project.pbxproj" << EOF541/* Begin XCConfigurationList section */542 8888888888888888888888AA /* Build configuration list for PBXProject "${APP_NAME}" */ = {543 isa = XCConfigurationList;544 buildConfigurations = (545 9999999999999999999999AA /* Debug */,546 AAAAAAAAAAAAAAAAAAAAABBB /* Release */,547 );548 defaultConfigurationIsVisible = 0;549 defaultConfigurationName = Release;550 };551 4444444444444444444444AA /* Build configuration list for PBXNativeTarget "${APP_NAME}" */ = {552 isa = XCConfigurationList;553 buildConfigurations = (554 BBBBBBBBBBBBBBBBBBBBBBCCC /* Debug */,555 CCCCCCCCCCCCCCCCCCCCCCDDD /* Release */,556 );557 defaultConfigurationIsVisible = 0;558 defaultConfigurationName = Release;559 };560/* End XCConfigurationList section */561 };562 rootObject = 7777777777777777777777AA /* Project object */;563}564EOF565 566# 2. Copy XCFramework to test project567echo "Copying XCFramework to test project..."568cp -R "${XCFRAMEWORK_PATH}" "${TEMP_DIR}/${APP_NAME}/"569 570# 3. Build and archive the app571echo "Building and archiving test app..."572cd "${TEMP_DIR}/${APP_NAME}"573 574# Create a simple xcscheme file to avoid xcodebuild scheme issues575mkdir -p "${APP_NAME}.xcodeproj/xcshareddata/xcschemes"576cat > "${APP_NAME}.xcodeproj/xcshareddata/xcschemes/${APP_NAME}.xcscheme" << EOF577<?xml version="1.0" encoding="UTF-8"?>578<Scheme579 LastUpgradeVersion = "1240"580 version = "1.3">581 <BuildAction582 parallelizeBuildables = "YES"583 buildImplicitDependencies = "YES">584 <BuildActionEntries>585 <BuildActionEntry586 buildForTesting = "YES"587 buildForRunning = "YES"588 buildForProfiling = "YES"589 buildForArchiving = "YES"590 buildForAnalyzing = "YES">591 <BuildableReference592 BuildableIdentifier = "primary"593 BlueprintIdentifier = "3333333333333333333333AA"594 BuildableName = "${APP_NAME}.app"595 BlueprintName = "${APP_NAME}"596 ReferencedContainer = "container:${APP_NAME}.xcodeproj">597 </BuildableReference>598 </BuildActionEntry>599 </BuildActionEntries>600 </BuildAction>601 <TestAction602 buildConfiguration = "Debug"603 selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"604 selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"605 shouldUseLaunchSchemeArgsEnv = "YES">606 <Testables>607 </Testables>608 </TestAction>609 <LaunchAction610 buildConfiguration = "Debug"611 selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"612 selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"613 launchStyle = "0"614 useCustomWorkingDirectory = "NO"615 ignoresPersistentStateOnLaunch = "NO"616 debugDocumentVersioning = "YES"617 debugServiceExtension = "internal"618 allowLocationSimulation = "YES">619 <BuildableProductRunnable620 runnableDebuggingMode = "0">621 <BuildableReference622 BuildableIdentifier = "primary"623 BlueprintIdentifier = "3333333333333333333333AA"624 BuildableName = "${APP_NAME}.app"625 BlueprintName = "${APP_NAME}"626 ReferencedContainer = "container:${APP_NAME}.xcodeproj">627 </BuildableReference>628 </BuildableProductRunnable>629 </LaunchAction>630 <ProfileAction631 buildConfiguration = "Release"632 shouldUseLaunchSchemeArgsEnv = "YES"633 savedToolIdentifier = ""634 useCustomWorkingDirectory = "NO"635 debugDocumentVersioning = "YES">636 <BuildableProductRunnable637 runnableDebuggingMode = "0">638 <BuildableReference639 BuildableIdentifier = "primary"640 BlueprintIdentifier = "3333333333333333333333AA"641 BuildableName = "${APP_NAME}.app"642 BlueprintName = "${APP_NAME}"643 ReferencedContainer = "container:${APP_NAME}.xcodeproj">644 </BuildableReference>645 </BuildableProductRunnable>646 </ProfileAction>647 <AnalyzeAction648 buildConfiguration = "Debug">649 </AnalyzeAction>650 <ArchiveAction651 buildConfiguration = "Release"652 revealArchiveInOrganizer = "YES">653 </ArchiveAction>654</Scheme>655EOF656 657# Now use xcodebuild with an explicitly defined product name for macOS658xcodebuild -project "${APP_NAME}.xcodeproj" -scheme "${APP_NAME}" -sdk macosx -configuration Release archive -archivePath "${ARCHIVE_PATH}" CODE_SIGN_IDENTITY="-" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO PRODUCT_NAME="${APP_NAME}" SWIFT_OPTIMIZATION_LEVEL="-Onone" -quiet659 660# 4. Create a package for distribution661echo "Creating distributable package from archive..."662cp -R "${ARCHIVE_PATH}/Products/Applications/${APP_NAME}.app" "${APP_PATH}"663 664# Check and log app structure665echo "App structure:"666ls -la "${APP_PATH}"667echo "Frameworks:"668ls -la "${APP_PATH}/Contents/Frameworks/" 2>/dev/null || echo "No Frameworks directory found"669 670# Create a zip file for potential distribution671cd "${BUILD_DIR}"672zip -r "${ZIP_PATH}" "${APP_NAME}.app"673 674# Check embedded provisioning profile675echo "Checking provisioning profile (if any)..."676PROVISIONING_PROFILE=$(find "${APP_PATH}/Contents" -name "embedded.provisionprofile" 2>/dev/null)677if [ -n "$PROVISIONING_PROFILE" ]; then678 echo "Found embedded provisioning profile:"679 security cms -D -i "$PROVISIONING_PROFILE" || echo "Unable to decode provisioning profile"680else681 echo "No embedded provisioning profile found (expected for ad-hoc builds)"682fi683 684# 5. Validate the app685echo "Validating macOS app..."686VALIDATION_OUTPUT="${VALIDATION_DIR}/validation_output.txt"687 688# Check if authentication credentials are provided689AUTH_ARGS=""690if [ -n "$APPLE_ID" ] && [ -n "$APPLE_PASSWORD" ]; then691 echo "Using Apple ID authentication for validation..."692 AUTH_ARGS="--username \"$APPLE_ID\" --password \"$APPLE_PASSWORD\""693else694 echo "No authentication credentials provided. Will perform basic validation."695 echo "To use your personal developer account, you can run the script with:"696 echo " APPLE_ID='your.email@example.com' APPLE_PASSWORD='your-app-specific-password' ./validate-macos.sh"697 echo "Note: You need to create an app-specific password at https://appleid.apple.com/account/manage"698fi699 700# For macOS we need to use notarytool or alternative checks because altool doesn't support macOS apps in the same way701echo "Note: For macOS, formal notarization process would require Apple Developer credentials."702echo "Performing alternative validation checks..."703 704# Final validation result705FINAL_VALIDATION_RESULT=0706 707# Check if app was created successfully708if [ -d "${APP_PATH}" ] && [ -s "${APP_PATH}/Contents/MacOS/${APP_NAME}" ]; then709 echo "✅ App package created successfully"710else711 echo "❌ App package not created or binary missing"712 FINAL_VALIDATION_RESULT=1713fi714 715# Check if app binary exists and is executable716if [ -f "${APP_PATH}/Contents/MacOS/${APP_NAME}" ] && [ -x "${APP_PATH}/Contents/MacOS/${APP_NAME}" ]; then717 echo "✅ App binary exists and is executable"718else719 echo "❌ App binary missing or not executable"720 FINAL_VALIDATION_RESULT=1721fi722 723# Check if framework was properly embedded724if [ -d "${APP_PATH}/Contents/Frameworks/llama.framework" ]; then725 echo "✅ llama.framework properly embedded"726else727 echo "❌ llama.framework not properly embedded"728 FINAL_VALIDATION_RESULT=1729fi730 731# Check if framework binary exists732if [ -f "${APP_PATH}/Contents/Frameworks/llama.framework/Versions/A/llama" ]; then733 echo "✅ Framework binary exists"734 735 # Further validate framework by checking architecture736 ARCHS=$(lipo -info "${APP_PATH}/Contents/Frameworks/llama.framework/Versions/A/llama" 2>/dev/null | grep -o "arm64\\|x86_64" | tr '\n' ' ')737 if [ -n "$ARCHS" ]; then738 echo "✅ Framework architecture(s): $ARCHS"739 else740 echo "⚠️ Could not determine framework architecture"741 fi742else743 echo "❌ Framework binary missing"744 FINAL_VALIDATION_RESULT=1745fi746 747# Check code signing748echo ""749echo "==== CODE SIGNING INFO ===="750codesign -vv -d "${APP_PATH}" 2>&1 || echo "Code signing verification not available (expected for ad-hoc builds)"751 752if [ $FINAL_VALIDATION_RESULT -eq 0 ]; then753 if [ -n "$AUTH_ARGS" ]; then754 echo ""755 echo "To notarize this app with Apple (requires Apple Developer account):"756 echo "xcrun notarytool submit \"${ZIP_PATH}\" --apple-id \"your-apple-id\" --password \"your-app-specific-password\" --team-id \"your-team-id\" --wait"757 echo ""758 fi759 echo "✅ Validation PASSED: macOS app built successfully with embedded framework"760else761 echo "❌ Validation FAILED: Issues found with the app or framework"762fi763 764# Don't clean up on error to allow inspection765if [ $FINAL_VALIDATION_RESULT -ne 0 ]; then766 echo ""767 echo "Temporary files kept for inspection at: ${TEMP_DIR}"768 echo "===== macOS Validation Process Failed ====="769 exit 1770fi771 772# Clean up temporary files but keep build artifacts773if [ $FINAL_VALIDATION_RESULT -eq 0 ]; then774 echo "Cleaning up temporary files..."775 #rm -rf "${TEMP_DIR}"776fi777 778echo "===== macOS Validation Process Completed ====="779echo "App package available at: ${APP_PATH}"780echo "Zipped app available at: ${ZIP_PATH}"781exit $FINAL_VALIDATION_RESULT782 