Creating a Packo Repository
Learn how to set up and maintain your own Sandio package repository
Repository Structure Overview
A Sandio repository follows a standardized structure to ensure compatibility and ease of use. All repositories must be hosted on a web server with the following directory layout:
sandio and must contain the sandio.json manifest file.
Required Files
sandio.json
The manifest file is the core of your repository. It contains metadata about your repository and lists all available packages. This file must be located at /sandio/sandio.json.
Manifest Structure
{
"name": "Repository Name",
"repoIcon": "repoicon.png",
"packages": []
}
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Display name of your repository |
repoIcon |
string | No | Filename of repository icon (relative to sandio folder) |
packages |
array | Yes | Array of package objects |
Package Object Structure
Each package in the packages array must follow this structure:
{
"id": "com.example.package",
"name": "Package Name",
"description": "Package description",
"version": "1.0.0",
"type": "wallpaper",
"downloadURL": "filename.jpg",
"fileSize": 2048576,
"author": "Author Name",
"logo": "logo.png",
"banner": "banner.jpg",
"screenshots": ["screen1.jpg", "screen2.jpg"],
"supportEmail": "support@example.com"
}
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Unique identifier in reverse domain format |
name |
string | Yes | Display name of the package |
description |
string | Yes | Brief description of the package |
version |
string | Yes | Version number (semantic versioning recommended) |
type |
string | Yes | One of: wallpaper, shortcut, ipa, configProfile, exploitTool |
downloadURL |
string | Yes | Filename of the package file (relative to type folder) |
fileSize |
integer | Yes | File size in bytes |
author |
string | Yes | Name of the package author or creator |
logo |
string | No | Filename of package logo (relative to type folder) |
banner |
string | No | Filename of package banner image (relative to type folder) |
screenshots |
array | No | Array of screenshot filenames (relative to type folder) |
supportEmail |
string | No | Email address for support inquiries |
Package Types and Folders
Each package type has a designated folder where all related files must be stored:
| Type Value | Folder Name | Description |
|---|---|---|
wallpaper |
Wallpapers/ |
High-quality wallpaper images |
shortcut |
Shortcuts/ |
iOS Shortcuts automation files |
ipa |
IPA/ |
iOS application packages |
configProfile |
Profiles/ |
Configuration profile files |
exploitTool |
ExploitTools/ |
Security and jailbreak tools |
Complete Example
Here is a complete example of a repository with multiple package types:
{
"name": "Example Sandio Repository",
"repoIcon": "repoicon.png",
"packages": [
{
"id": "com.example.abstract.wallpaper",
"name": "Abstract Gradient",
"description": "Beautiful abstract gradient wallpaper perfect for any device",
"version": "1.0",
"type": "wallpaper",
"downloadURL": "abstract_gradient.jpg",
"fileSize": 2048576,
"author": "John Designer",
"logo": "abstract_logo.png",
"banner": "abstract_banner.jpg",
"screenshots": ["preview1.jpg", "preview2.jpg"],
"supportEmail": "support@example.com"
},
{
"id": "com.example.productivity.shortcut",
"name": "Quick Email",
"description": "Send emails quickly with pre-filled templates",
"version": "2.1",
"type": "shortcut",
"downloadURL": "quick_email.shortcut",
"fileSize": 51200,
"author": "Jane Developer",
"logo": "email_logo.png",
"banner": null,
"screenshots": null,
"supportEmail": "jane@example.com"
}
]
}
Image Guidelines
Repository Icon
- Recommended size: 512x512 pixels
- Format: PNG with transparency support
- Should be placed in the root sandio folder
Package Logo
- Recommended size: 256x256 pixels
- Format: PNG or JPG
- Square aspect ratio
- Should be placed in the appropriate type folder
Package Banner
- Recommended size: 1200x600 pixels
- Format: JPG or PNG
- 16:9 or 2:1 aspect ratio
- Should be placed in the appropriate type folder
Screenshots
- Recommended size: iPhone resolution (1170x2532 or similar)
- Format: JPG or PNG
- Portrait orientation preferred
- Should be placed in the appropriate type folder
Hosting Your Repository
Your repository must be accessible via HTTP or HTTPS. Here are recommended hosting options:
Static Web Hosting
- GitHub Pages
- Netlify
- Vercel
- AWS S3 with CloudFront
Traditional Web Hosting
- Shared hosting with Apache or Nginx
- VPS or dedicated server
- Any hosting that serves static files
Adding Your Repository to Sandio
Users can add your repository by following these steps:
- Open Sandio and navigate to Packo
- Tap the Sources tab
- Tap the plus icon in the top right
- Enter your repository URL (just the base URL, e.g.,
https://example.com) - Sandio will automatically append
/sandio/sandio.json - Tap Add to import the repository
Testing Your Repository
Before making your repository public, ensure everything works correctly:
Validation Checklist
- Verify the
sandio.jsonfile is valid JSON - Ensure all file paths are correct and files exist
- Check that file sizes match the actual file sizes
- Test downloading each package
- Verify images load correctly
- Confirm all URLs are accessible
- Test with CORS enabled if hosting on a different domain
JSON Validation
Use online tools to validate your JSON structure:
curl https://yourserver.com/sandio/sandio.json | python -m json.tool
CORS Configuration
If your repository is hosted on a different domain than where Sandio might access it from, you need to enable Cross-Origin Resource Sharing (CORS).
Apache Configuration
Add this to your .htaccess file:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type"
Nginx Configuration
Add this to your server block:
location /sandio/ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET, OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type";
}
Best Practices
Version Management
- Use semantic versioning (MAJOR.MINOR.PATCH)
- Increment version numbers when updating packages
- Keep old versions if users might need them
File Organization
- Keep files organized in their respective type folders
- Use descriptive filenames
- Compress images appropriately without losing quality
- Test download speeds for large files
Documentation
- Provide clear package descriptions
- Include installation instructions if needed
- List compatibility requirements
- Provide support contact information
Security
- Only host safe and verified content
- Scan IPA files for malware before hosting
- Use HTTPS for all content delivery
- Keep your server software updated
Troubleshooting
Repository Not Loading
- Verify the URL is accessible in a web browser
- Check that
sandio.jsonexists at the correct path - Ensure the JSON is valid and properly formatted
- Verify CORS headers are configured correctly
Packages Not Displaying
- Check that the package type is spelled correctly
- Verify all required fields are present
- Ensure file paths are relative to the type folder
- Confirm files exist at the specified locations
Images Not Loading
- Verify image files exist in the correct folders
- Check file permissions on the server
- Ensure image paths in JSON are correct
- Confirm images are in supported formats (PNG, JPG)
Download Failures
- Verify the download URL is correct
- Check file permissions allow reading
- Ensure file size matches the actual file
- Test download manually with curl or wget
Updating Your Repository
To update your repository with new packages or changes:
- Add new package files to the appropriate type folders
- Update the
sandio.jsonmanifest with new package entries - Increment version numbers for updated packages
- Upload all files to your server
- Users can refresh their sources in Sandio to see updates
Support and Resources
For additional help and community support:
- Follow @FCE365 on Twitter for updates
- Visit idevicecentral.com for more information
- Join the community to share repositories and get help