XGRIDSDocs
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • Lixel PortalCam Series

    • PortalCam P1

      • Product Overview
      • Basic Operation
      • Using the LCC Scan App
      • Maintenance and Care
      • FAQ
  • Lixel K Series

    • Lixel K1

      • Product Overview
      • Basic Operation
      • Device Activation and Connection
      • Scanning Workflow
      • Acquire Point Cloud Data with Absolute Coordinate
      • Map Fusion
      • Route Planning Suggestions for Typical Scenes
      • Precautions
      • FAQ
    • Lixel K2

      • Product Overview
      • Basic Operation
      • Device Activation and Connection
      • Scanning Workflow
      • Acquire Point Cloud Data with Absolute Coordinate
      • Map Fusion
      • Route Planning Suggestions for Typical Scenes
      • Precautions
      • FAQ
  • Lixel L Series

    • Lixel L2 Pro

      • Product Overview
      • Basic Operation
      • Device Activation and Connection
      • Scanning Workflow
      • Acquire Point Cloud Data with Absolute Coordinate
      • Measure Point
      • Appendix
      • FAQ
    • Lixel L3

      • Product Overview
      • Basic Device Functions
      • Device Activation and Connection
      • Data Capture
      • Capturing Absolute Coordinates
      • Appendix
  • Accessories

    • Stick Light

      • Installation Guide
      • Basic Operation
      • FAQ
  • Lixel Studio

    • Version and Copyright
    • Installation and Activation
    • Software Interface
    • File Operations
    • Project Processing
    • Tools
    • 2D Drawing
    • Applications
    • Settings
    • Device Connection
    • FAQ
  • Lixel CyberColor

    • LCC Studio

      • Getting Started
      • Version and Updates
      • Download and Installation
      • Interface Overview and Navigation
      • Before Reconstruction
      • Model Reconstruction
      • Single Model Reconstruction
      • Map Fusion
      • Aerial-Ground Fusion
      • Aerial Reconstruction
      • My Models
      • Other Features
      • Settings and Account
      • Converter
      • Video Reconstruction
      • FAQ
    • LCC Scene Editor

      • Version & Updates
      • Account & Login
      • Product Overview & Home
      • Editor Interface
      • Scene Navigation Modes
      • File
      • Settings
      • Edit Operations
      • Window
      • Global Toolbar
      • Assets & Properties
      • Left Toolbar
      • Viewpoints
      • Portal
      • Skybox
      • Annotations
      • Measurement
      • Flythrough
      • Scene Report
      • 3D Layout
      • Mini-Map
      • Preview Mode (Viewer)
      • Help
      • FAQ
      • Spawn Point
    • LCC Model Editor

      • Version and Updates
      • User Guide
      • Overview and Interface
      • File Operations
      • Selectors
      • Editing Models
      • Measurement
      • Color Grading
      • Asset Management
      • Settings and Help
      • FAQ
    • Capture Guide

      • Overview
      • Capture Devices Overview
      • General Capture Principles
      • Indoor Scene Capture
      • Outdoor Scene Capture
      • Large-Scale Capture (Map Fusion)
      • Aerial-Ground Map Fusion Capture
      • Object Capture
      • People Capture
      • Video Reconstruction Capture
      • HD Enhancement
      • Control Points (Lixel P1)
      • FAQ and Troubleshooting
    • LCC Studio Linux

      • Product Overview
      • Architecture Guide
      • Installation and Deployment Guide
      • Container Startup Parameters Guide
      • CodeMeter Offline Licensing Deployment Guide
      • API Reference
      • Appendix - Developer Data Guide
      • Appendix - Error Code List
      • Single-Machine Multi-GPU Cluster Deployment QuickStart
    • Best Practices

      • Merging Multiple Large 3DGS Models
    • Version History
  • Plugin & SDK

    • Unreal

      • Introduction
      • Quick Start - Windows
      • Quick Start - Linux
      • Quick Start - Quest3
      • Editions and Licensing
      • Rendering
      • Tiled Rasterization (Experimental)
      • Visual Settings
      • Normals and Lighting
      • Scene Editing
      • Performance Parameters
      • Performance Guide
      • Third-party and Engine Plugin Integration
      • Proxy Mesh
      • Loading Animation
      • Collision
      • Navigation System Support
      • Single Layer Water Support
      • Localization
      • FAQ
      • Troubleshooting
      • Logging and Diagnostics
      • Contact Us
      • Best Practices

        • Relighting 3DGS with a LixelStudio Mesh
      • API Reference

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • SOG / SPZ / PLY Actors
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • Changelog

        • v3.4.0
        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1
    • Unity

      • Unity SDK Introduction
      • Technical Features
      • Development Environment Requirements
      • PC Quick Start Guide
      • Project Settings Optimization Guide
      • Pico 4 Ultra Development Guide
      • Pico 4 Ultra PC Streaming Guide
      • Quest 3 Development Guide
      • Quest 3 PC Streaming Guide
      • OpenXR Development Guide
      • Pico 4 Ultra Business Streaming Guide
      • Glossary
      • FAQ
      • Contact Us
      • Feature Development Guide

        • Multi-Scene Mixed Rendering Development Guide
        • Shadow Receiving Development Guide
        • Real-Time Lighting Development Guide
        • Multi-Camera Rendering Development Guide
        • High-Resolution Image Rendering Development Guide
        • LCC and LCC2 Data Format Compatibility Development Guide
        • Loading Effect Development Guide
        • Mip Rendering Mode Switching Development Guide
        • Edge and Corner Snapping Development Guide
        • Projected Decal Development Guide
        • Video Projected Decal Development Guide
        • Highlight Development Guide
        • Real-Time Clipping Development Guide
        • Color Adjustment Development Guide
        • Getting Scene Mesh Data Development Guide
        • Editor Mode Development Guide
        • Render Performance Parameter Configuration Guide
        • Application and Data Co-packaging Development Guide
        • Collision System Development Guide
        • macOS Development Permission Issue Guide
        • iOS Device Compilation and Packaging Development Guide
      • API Reference

        • LCCManager
        • Renderer
        • Data Types
      • Changelog

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14
    • Web

      • Introduction
      • Rendering Performance Optimization Guide
      • Graphics Configuration
      • FAQ
      • API Reference

        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
        • LCCObject::checkRenderNextFrame
        • LCCObject::clearRenderNextFrame
        • LCCObject::ecef2Prj
        • LCCObject::getBounds
        • LCCObject::getEnvInstancedMesh
        • LCCObject::getInstancedMesh
        • LCCObject::getLodInfos
        • LCCObject::getOriginPosition
        • LCCObject::getProjectionCoordinateSystemInfos
        • LCCObject::hasCollision
        • LCCObject::hasEnvironment
        • LCCObject::hasShcoef
        • LCCObject::intersectsCapsule
        • LCCObject::intersectsRayExt
        • LCCObject::intersectsRayFromOriginExt
        • LCCObject::intersectsSphere
        • LCCObject::lowerToBottom
        • LCCObject::prj2Ecef
        • LCCObject::raiseToTop
        • LCCObject::raycast
        • LCCObject::raycastFromOrigin
        • LCCObject::setAlpha
        • LCCObject::setClipBox
        • LCCObject::setClipPlane
        • LCCObject::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • LCCObject::setOriginPosition
        • LCCObject::setPointsColor
        • LCCObject::setRenderState
        • LCCObject::setRotation
        • LCCObject::setScale
        • LCCObject::setSemantic
        • LCCObject::setSemanticColor
        • LCCObject::setSmooth
        • LCCObject::setStartLod
        • LCCObject::setTranslation
        • LCCObject::setVisible
        • LCCObject::togglePointsDisplayMode
        • LCCObject::useEnvironment
        • LCCObject::useShcoef
      • Changelog

        • v0.6.3
        • v0.6.2
        • v0.6.1
        • v0.6.0
        • v0.5.5
        • v0.5.4
        • v0.5.3
        • v0.5.2
        • v0.5.1
        • v0.5.0
        • v0.4.1
        • v0.4.0
        • v0.3.1
        • v0.3.0
        • v0.2.0
    • Lixel OpenAPI

      • Overview
      • Connection & Authentication
      • Message Model & Codec
      • Interface Catalog
      • Real-time Data
      • Project File Access
      • Error Codes
      • Python

        • Quick Start
        • Client Wrapper & Tools
        • FAQ
      • C++

        • Quick Start
        • Client & Examples
        • FAQ

macOS Development Permission Issue Guide

Because the LCC Unity SDK uses a third-party webP decoding library, you may encounter the "Failed to open xxx.bundle" error when using the SDK on macOS. This is macOS's security mechanism (Gatekeeper) blocking uncertified third-party plugins from running, and has nothing to do with Unity or the SDK itself.

This guide has two parts:

  • Part 1: Temporarily resolve third-party library permission issues in the development environment.
  • Part 2: The formal solution when packaging an application (for public distribution).

Part 1: Temporarily Resolve Third-party Library Permission Issues in the Development Environment

The following methods apply to quickly removing the bundle restriction during development; try them in order of priority.

Method 1: Allow directly in System Settings (fastest)

StepOperation
1Open the Mac System Settings, and find Privacy & Security on the left
2Scroll down to find the "Security" section
3Find the prompt "xxx.bundle was blocked from use", and click the adjacent Allow button
4Restart Unity, then re-import or run the SDK

Method 2: Remove the quarantine attribute via Terminal (most thorough)

macOS adds the com.apple.quarantine quarantine attribute to files downloaded from the network; you can remove it directly with a Terminal command.

StepOperation
1Open Launchpad → Other → Terminal
2Enter the command (keep a trailing space): sudo xattr -rd com.apple.quarantine
3Drag the xxx.bundle file that reported the error directly into the Terminal window to auto-complete the path
4Press Enter, and enter the Mac login password (not shown while typing, which is normal)
5Restart Unity after the command completes

Tip:

This command requires administrator privileges (sudo). The screen will not show anything while you type the password; just finish typing and press Enter.

Method 3: Add executable permissions (supplementary)

If Methods 1 and 2 still do not work, add executable permissions to the bundle:

chmod -R 755 /path/to/xxx.bundle

You can also drag the bundle file into the Terminal to auto-complete the path, press Enter, and restart Unity.

Method 4: Check Unity plugin platform settings

StepOperation
1Find the xxx.bundle file in Unity's Project window
2Select it and look at the Inspector window
3In Platform Settings, check Any Platform, or separately check Standalone / macOS
4Make sure Exclude Platform is not checked
Check the bundle's plugin platform settings in the Unity Inspector

Check Any Platform or macOS in Platform Settings in the Inspector

Method 5: Temporarily disable Gatekeeper (last resort)

Warning:

This method reduces system security. It is only recommended for temporary use on a development machine; be sure to re-enable it after development is complete.

If none of the above methods work, you can temporarily disable system security verification:

sudo spctl --master-disable

Verify whether it is disabled:

spctl --status
# assessments disabled is shown when disabled successfully

Re-enable security protection after development is complete:

sudo spctl --master-enable

Part 2: Resolve Third-party Library Permission Issues When Packaging an Application

To let end users use an application containing a third-party SDK with no perception of the issue, you must complete "deep code signing + Apple notarization + Staple ticket binding" on the developer side. This is the only compliant standard solution on macOS with zero user operations.

Prerequisites (all required)

No.ConditionDescription
1Apple Developer ProgramUSD 99/year, used to obtain the Developer ID Application certificate
2Enable Hardened RuntimeIn Unity Player Settings → Other Settings → Mac, check Use Hardened Runtime
3Configure a unique Bundle IDKeep it consistent with the developer portal
4Disable Unity auto signingUse Terminal to manually deep-sign after packaging

Complete Signing and Notarization Workflow

Step 1: Clear extended attributes

xattr -cr "YourApp.app"

Step 2: Deep recursive signing

The --deep parameter automatically traverses all internal .bundle, .dylib, and .framework files and signs them uniformly, thoroughly solving the problem of third-party bundles being blocked for being unsigned.

codesign --force --deep --options runtime --sign "Developer ID Application: YourCompany (TeamID)" "YourApp.app"

Key point:

Replace YourCompany (TeamID) with your full Developer ID. Using --deep ensures all internal third-party bundles are signed — this is the root cause of 90% of the "still errors after signing" issues.

Step 3: Package a standard zip for notarization

You must use the ditto command to package; do not use the system right-click compression (otherwise the notarization verification will fail).

ditto -c -k --sequesterRsrc --keepParent "YourApp.app" build.zip

Step 4: Upload to Apple for notarization

Use notarytool (the official new tool) to submit for notarization; Apple's backend automatically scans for malicious code:

xcrun notarytool submit build.zip --apple-id your@apple.com --password app-specific-password --team-id TeamID --wait

Wait for Accepted to be returned, which means notarization passed.

Step 5: Staple the notarization ticket into the App

After stapling, users can pass verification even when opening offline:

xcrun stapler staple "YourApp.app"
# Verify whether it succeeded
xcrun stapler validate "YourApp.app"

Internal Testing / Enterprise Intranet Distribution (alternative)

If you do not yet have an Apple developer account, you can distribute within the intranet using the following approach:

StepOperation
1Unity packages the .app
2On the build machine, run: xattr -rd com.apple.quarantine "YourApp.app"
3Distribute through intranet tools (scp, enterprise cloud drive, USB drive), do not download via a browser

Limitation:

This approach only applies to intranet transfer. Browser downloads will re-add the quarantine attribute, causing the bundle error to reappear, and is not suitable for public distribution.

Common Pitfalls

Common mistakeCorrect approach
Signed only the main program, without --deepMust use --deep to recursively sign all internal bundles / dylibs
Did not enable Hardened RuntimeCheck it in Player Settings before Unity packaging, otherwise notarization fails directly
Forgot to staple the ticket after notarizationMust run xcrun stapler staple, otherwise offline opening still shows the dialog
Did not clear extended attributes before signingRun xattr -cr first to clear residual attributes of all bundles, then sign
Used system right-click compression instead of dittoMust use ditto -c -k standard packaging, otherwise notarization verification fails

Summary

The only standard solution for public distribution = Apple Developer ID + deep codesign + notarytool notarization + stapler ticket. After completion, users download and use it immediately, with no security dialog and no perception of the issue.