Commit e25e0600 authored by Wei Han's avatar Wei Han

xcframework accepts strings from js

parent 1ce35c7d
......@@ -6,20 +6,16 @@ import { QmsDashboardView } from 'QmsPlugin';
function App() {
const isDarkMode = useColorScheme() === 'dark';
// useEffect(() => {
// console.log('🚀 Launching plugin UI immediately...');
// try {
// showPluginUI();
// } catch (e) {
// console.error('❌ Error launching plugin UI:', e);
// }
// }, []);
return (
<SafeAreaView>
<StatusBar barStyle={isDarkMode ? 'light-content' : 'dark-content'} />
<View style={{ flex: 1 }}>
<QmsDashboardView style={{ flex: 1 }} />
<QmsDashboardView
style={{ flex: 1 }}
ClientID={'client id test'}
ClientCode={'client code test'}
user_token={'user token test'}
/>
</View>
</SafeAreaView>
);
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>QmsPluginFramework.framework/QmsPluginFramework</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>QmsPluginFramework.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>QmsPluginFramework.framework/QmsPluginFramework</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>QmsPluginFramework.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>
//QmsPlugin.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface QmsPluginUI : NSObject
+ (UIViewController *)makeViewController;
@end
NS_ASSUME_NONNULL_END
//
// QmsPluginFramework.h
// QmsPluginFramework
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
//! Project version number for QmsPluginFramework.
FOUNDATION_EXPORT double QmsPluginFrameworkVersionNumber;
//! Project version string for QmsPluginFramework.
FOUNDATION_EXPORT const unsigned char QmsPluginFrameworkVersionString[];
// Public headers
#import <QmsPluginFramework/QmsPlugin.h>
framework module QmsPluginFramework {
umbrella header "QmsPluginFramework.h"
export *
module * { export * }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Assets.car</key>
<data>
mDeq0E4lblXfFuIgkojjE5zY6hk=
</data>
<key>Headers/QmsPlugin.h</key>
<data>
46196FWEMwEuy8Dd/6jLyvdFEok=
</data>
<key>Headers/QmsPluginFramework.h</key>
<data>
jlHmWnGf08fskfPJb//4vaShDlo=
</data>
<key>Info.plist</key>
<data>
/JZsUWwwr7A+ZF0o001HQXRnzpI=
</data>
<key>Modules/module.modulemap</key>
<data>
BD9YnWBkeFmDcuOl4cAjALd/7yw=
</data>
</dict>
<key>files2</key>
<dict>
<key>Assets.car</key>
<dict>
<key>hash2</key>
<data>
0+eonZqFOeyimWUH94CuUhfXNEulhfi9YeuUE/wnX0s=
</data>
</dict>
<key>Headers/QmsPlugin.h</key>
<dict>
<key>hash2</key>
<data>
uuQ2Omt7lnrShVFriPpMiXZhx8kx6Km97GxC3m1ro+A=
</data>
</dict>
<key>Headers/QmsPluginFramework.h</key>
<dict>
<key>hash2</key>
<data>
/9Qe6QJ19ZC61+OfPl2+OZK1DI2Wa1lS++m7D41g3zI=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash2</key>
<data>
e+P6RtiuicqWfZ3H2B43r960DPkFwUWqXKWU+w7OVD0=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>
//QmsPlugin.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface QmsPluginUI : NSObject
+ (UIViewController *)makeViewController;
@end
NS_ASSUME_NONNULL_END
//
// QmsPluginFramework.h
// QmsPluginFramework
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
//! Project version number for QmsPluginFramework.
FOUNDATION_EXPORT double QmsPluginFrameworkVersionNumber;
//! Project version string for QmsPluginFramework.
FOUNDATION_EXPORT const unsigned char QmsPluginFrameworkVersionString[];
// Public headers
#import <QmsPluginFramework/QmsPlugin.h>
framework module QmsPluginFramework {
umbrella header "QmsPluginFramework.h"
export *
module * { export * }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Assets.car</key>
<data>
mDeq0E4lblXfFuIgkojjE5zY6hk=
</data>
<key>Headers/QmsPlugin.h</key>
<data>
46196FWEMwEuy8Dd/6jLyvdFEok=
</data>
<key>Headers/QmsPluginFramework.h</key>
<data>
jlHmWnGf08fskfPJb//4vaShDlo=
</data>
<key>Info.plist</key>
<data>
4pQwOIuYwsUH4Iiw1M402s3Ii8Y=
</data>
<key>Modules/module.modulemap</key>
<data>
BD9YnWBkeFmDcuOl4cAjALd/7yw=
</data>
</dict>
<key>files2</key>
<dict>
<key>Assets.car</key>
<dict>
<key>hash2</key>
<data>
0+eonZqFOeyimWUH94CuUhfXNEulhfi9YeuUE/wnX0s=
</data>
</dict>
<key>Headers/QmsPlugin.h</key>
<dict>
<key>hash2</key>
<data>
uuQ2Omt7lnrShVFriPpMiXZhx8kx6Km97GxC3m1ro+A=
</data>
</dict>
<key>Headers/QmsPluginFramework.h</key>
<dict>
<key>hash2</key>
<data>
/9Qe6QJ19ZC61+OfPl2+OZK1DI2Wa1lS++m7D41g3zI=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash2</key>
<data>
e+P6RtiuicqWfZ3H2B43r960DPkFwUWqXKWU+w7OVD0=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>
// DashboardViewController
// DashboardViewController.h
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface DashboardViewController : UIViewController
@property (nonatomic, copy) NSString *ClientID;
@property (nonatomic, copy) NSString *ClientCode;
@property (nonatomic, copy) NSString *user_token;
@end
NS_ASSUME_NONNULL_END
......@@ -55,6 +55,7 @@
self.projectName = @"Ara E`Residence Dev";
[self refreshDashboardContent];
NSLog(@"in viewDidLoad ClientID: %@, ClientCode: %@, user_token: %@", self.ClientID, self.ClientCode, self.user_token);
}
- (void)viewWillAppear:(BOOL)animated {
......@@ -62,6 +63,7 @@
NSLog(@"Dashboard loaded, refreshing data");
[self refreshDashboardContent];
NSLog(@"in viewWillAppear ClientID: %@, ClientCode: %@, user_token: %@", self.ClientID, self.ClientCode, self.user_token);
}
#pragma mark - Refresh Logic
......@@ -464,14 +466,6 @@
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"✅ Stored %lu announcements", (unsigned long)sorted.count);
// === Check for popup announcements ===
// for (NSDictionary *ann in sorted) {
// if ([ann[@"popup"] integerValue] == 1) {
// [self showPopupForAnnouncement:ann];
// break;
// }
// }
}
- (void)refreshDashboardSectionsWithData:(NSDictionary *)mainData {
......
......@@ -5,6 +5,10 @@
@interface QmsDashboardView : UIView
@property (nonatomic, strong) UIViewController *dashboardVC;
@property (nonatomic, assign) BOOL didSetupVC;
// New props
@property (nonatomic, copy) NSString *ClientID;
@property (nonatomic, copy) NSString *ClientCode;
@property (nonatomic, copy) NSString *user_token;
@end
@implementation QmsDashboardView
......@@ -24,17 +28,54 @@
UIViewController *parentVC = [UIApplication sharedApplication].keyWindow.rootViewController;
if (parentVC) {
[parentVC addChildViewController:_dashboardVC];
_dashboardVC.view.frame = parentVC.view.bounds; // Force full screen
_dashboardVC.view.frame = parentVC.view.bounds;
_dashboardVC.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[parentVC.view addSubview:_dashboardVC.view]; // Add directly to root VC
[parentVC.view addSubview:_dashboardVC.view];
[_dashboardVC didMoveToParentViewController:parentVC];
_didSetupVC = YES;
// Forward props once the VC is added
[self forwardPropsToVC];
}
}
}
@end
#pragma mark - Prop Setters
- (void)setClientID:(NSString *)ClientID {
_ClientID = [ClientID copy];
[self forwardProp:@"ClientID" value:_ClientID];
}
- (void)setClientCode:(NSString *)ClientCode {
_ClientCode = [ClientCode copy];
[self forwardProp:@"ClientCode" value:_ClientCode];
}
- (void)setUser_token:(NSString *)user_token {
_user_token = [user_token copy];
[self forwardProp:@"user_token" value:_user_token];
}
#pragma mark - Forward Props via KVC
- (void)forwardProp:(NSString *)key value:(NSString *)value {
if (_dashboardVC && [_dashboardVC respondsToSelector:NSSelectorFromString(key)]) {
@try {
[_dashboardVC setValue:value forKey:key];
} @catch (NSException *exception) {
NSLog(@"⚠️ Failed to set %@ on dashboardVC: %@", key, exception);
}
}
}
- (void)forwardPropsToVC {
[self forwardProp:@"ClientID" value:_ClientID];
[self forwardProp:@"ClientCode" value:_ClientCode];
[self forwardProp:@"user_token" value:_user_token];
}
@end
@interface QmsDashboardViewManager : RCTViewManager
@end
......@@ -47,4 +88,9 @@ RCT_EXPORT_MODULE(QmsDashboardView)
return [[QmsDashboardView alloc] init];
}
// ✅ Export the props so JS can pass values
RCT_EXPORT_VIEW_PROPERTY(ClientID, NSString)
RCT_EXPORT_VIEW_PROPERTY(ClientCode, NSString)
RCT_EXPORT_VIEW_PROPERTY(user_token, NSString)
@end
......@@ -8,32 +8,32 @@
<key>BinaryPath</key>
<string>QmsPluginFramework.framework/QmsPluginFramework</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>QmsPluginFramework.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>QmsPluginFramework.framework/QmsPluginFramework</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>QmsPluginFramework.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
......
......@@ -5,6 +5,9 @@ import type { ViewStyle } from 'react-native';
type Props = {
style?: ViewStyle;
ClientID?: string;
ClientCode?: string;
user_token?: string;
};
const NativeQmsDashboardView = requireNativeComponent<Props>('QmsDashboardView');
......
......@@ -4,8 +4,3 @@ export { QmsDashboardView } from './QmsDashboardView';
export function showPluginUI(): void {
QmsPlugin.showPluginUI();
}
// export default {
// showPluginUI,
// QmsDashboardView,
// };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment