Appearance
Development Guide for Standalone Application (SA)
This guide provides detailed instructions for developers looking to build standalone applications using the Motanamy Standalone Application (SA) platform.
Architecture Overview
The SA platform is designed for building applications that can run independently of network connectivity. Key components include:
- Local Runtime Engine: Handles application execution and resource management
- Offline Data Store: SQLite-based local database with synchronization
- Cross-Platform Framework: Unified API for desktop and mobile platforms
- Plugin System: Extensible architecture for adding features
- Packaging Tools: Native app bundling for different platforms
Setting Up Development Environment
Prerequisites
- Node.js 18+ or Python 3.8+
- Motanamy CLI Tool
- SA SDK
- Platform-specific tools (Xcode for iOS, Android Studio for Android, etc.)
Installation Steps
Install Motanamy CLI:
bashnpm install -g @motanamy/cliInitialize SA Project:
bashmotanamy init sa-app my-sa-app cd my-sa-appInstall Dependencies:
bashnpm installSet up Platform Tools:
- For mobile: Install Android Studio and Xcode
- For desktop: Ensure .NET or Electron prerequisites
Building Applications
Project Structure
SA applications follow this structure:
my-sa-app/
├── src/
│ ├── main.js
│ ├── components/
│ ├── services/
│ └── assets/
├── platforms/
│ ├── android/
│ ├── ios/
│ └── desktop/
├── package.json
├── app.json
└── README.mdKey Files
- app.json: Application manifest with metadata and platform configs
- main.js: Application entry point
- platforms/: Platform-specific code and configurations
Example Application
javascript
// app.json
{
"name": "MySA App",
"version": "1.0.0",
"description": "Standalone application example",
"platforms": ["android", "ios", "desktop"],
"permissions": ["storage", "camera"],
"offline": true
}
// src/main.js
import { SAApp, LocalDatabase } from '@motanamy/sa-sdk';
class MyApp extends SAApp {
async onLaunch() {
console.log('SA App launched!');
// Initialize local database
this.db = new LocalDatabase('myapp.db');
// Set up offline sync
this.setupOfflineSync();
}
setupOfflineSync() {
// Sync logic when online
if (navigator.onLine) {
this.syncDataToCloud();
}
}
}
export default MyApp;Local Data Management
Using Local Database
javascript
import { LocalDatabase } from '@motanamy/sa-sdk';
const db = new LocalDatabase('app.db');
// Create table
await db.execute(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
)
`);
// Insert data
await db.execute('INSERT INTO users (name, email) VALUES (?, ?)', ['John Doe', 'john@example.com']);
// Query data
const users = await db.query('SELECT * FROM users');Data Synchronization
javascript
import { SyncManager } from '@motanamy/sa-sdk';
const syncManager = new SyncManager({
localDb: db,
remoteUrl: 'https://api.motanamy.com/sync',
apiKey: 'your-api-key'
});
// Sync on connection
window.addEventListener('online', () => {
syncManager.sync();
});Cross-Platform Development
Platform-Specific Code
javascript
// src/platforms/android.js
export const androidSpecific = {
getDeviceInfo() {
// Android-specific implementation
return {
platform: 'android',
version: '10.0'
};
}
};
// src/platforms/ios.js
export const iosSpecific = {
getDeviceInfo() {
// iOS-specific implementation
return {
platform: 'ios',
version: '14.0'
};
}
};
// src/main.js
import { Platform } from '@motanamy/sa-sdk';
const deviceInfo = Platform.select({
android: () => androidSpecific.getDeviceInfo(),
ios: () => iosSpecific.getDeviceInfo(),
default: () => ({ platform: 'desktop' })
})();UI Development
Using SA UI Components
jsx
import { View, Text, Button, List } from '@motanamy/sa-ui';
function App() {
const [items, setItems] = useState([]);
return (
<View>
<Text>Welcome to SA App</Text>
<Button onPress={() => addItem()}>Add Item</Button>
<List data={items} renderItem={(item) => <Text>{item.name}</Text>} />
</View>
);
}Responsive Design
SA supports responsive layouts for different screen sizes:
javascript
const styles = StyleSheet.create({
container: {
flex: 1,
padding: Platform.select({
mobile: 10,
desktop: 20
})
},
text: {
fontSize: Platform.select({
mobile: 14,
desktop: 16
})
}
});Plugin Development
Creating Plugins
javascript
// plugins/my-plugin.js
import { SAPlugin } from '@motanamy/sa-sdk';
export default class MyPlugin extends SAPlugin {
async onLoad(app) {
// Plugin initialization
app.addMenuItem({
title: 'My Plugin Action',
action: () => this.doSomething()
});
}
doSomething() {
console.log('Plugin action executed!');
}
}Building and Deployment
Building for Platforms
bash
# Build for all platforms
npm run build
# Build specific platform
npm run build:android
npm run build:ios
npm run build:desktopPackaging
bash
# Create installable packages
motanamy package --platform android
motanamy package --platform ios
motanamy package --platform desktopDistribution
- App Stores: Submit to Google Play, App Store
- Direct Download: Host on your website
- Enterprise Distribution: Use MDM solutions
Best Practices
Performance
- Minimize app size by tree-shaking unused code
- Use lazy loading for large components
- Optimize images and assets
- Implement proper caching strategies
Offline-First
- Design for offline usage primarily
- Handle network failures gracefully
- Provide clear offline indicators
- Queue actions for when connection returns
Security
- Encrypt sensitive local data
- Implement proper authentication
- Use secure communication for sync
- Regularly update dependencies
Testing
Unit Testing
bash
npm testIntegration Testing
bash
npm run test:integrationDevice Testing
- Use emulators/simulators for initial testing
- Test on physical devices for production readiness
- Consider automated testing services
Troubleshooting
Common Issues
- Build failures: Check platform SDK versions
- Database errors: Verify schema migrations
- Sync issues: Check network permissions and API endpoints
Debug Tools
Enable debug mode for detailed logging:
javascript
// In app.json
{
"debug": true
}Resources
For additional help, visit our developer community or contact support.