IOS 程序插件及功能动态更新思路

3 篇文章 0 订阅
  1. 所用框架及语言 IOS客户端-Wax(开发愤怒的小鸟的连接Lua 和 Objc的框架),Lua,Objc, 服务端-Java(用于返回插件页面)
  2. 工具框架链接地址:Wax - https://github.com/probablycorey/wax  Netty - https://netty.io/  用做Http服务器,返回页面
        由于Lua脚本语言,不需要编译即可运行,这点是我的这个思路可以执行的大前提,再加上苹果允许像Lua这样的脚本的存在,这一思路才能得以实现。个人感觉这一思路有点类似于ipad上的一款编程应用 Codea,Codea允许我们再ipad利用Lua编程,写游戏。

正文:
1.在IOS程序里面调用wax_start( "init.lua", nil);这个init.lua即是我们插件的最起始的类似于程序main函数的类,lua脚本的起点。
2.在程序中预留功能按钮 请求服务器获取插件列表,在选择列表后可以将此项对应的Lua脚本(TestController.lua)下载到客户端,这样我们客户端就多了一个相当于Objc类的文件了,不同于objc的是这个类不需要编译,现在即可运行了。
        3.我们在客户端还有一点要做的是要保存我们的插件列表及所在路径,这样程序才知道去哪里找到相应的Lua脚本来执行。
思路很简单,不知道自己说清楚了没有,下面我把自己写的例子贴上来,与大家交流一下

服务端的程序,点击HttpStaticFileServer启动服务器,这个程序是Netty的示例,在这足够用了,未作修改,TestController.lua是服务端要返回给客户端的脚本。
客户端程序,主要是RootViewController中与Lua交互,在此类中设置服务器的地址及对应端口

程序运行效果如下图:



示例程序下载路径: http://download.csdn.net/detail/wssand44/4878972

因为苹果沙箱机制,我们程序无法再安装后访问资源包目录,所以从官网下载的framework无法在应用到实际应用中,我们需要修改wax.m中的如下方法,修改后如下
void wax_setup() {
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 

    NSFileManager *fileManager = [NSFileManager defaultManager];
//    [fileManager changeCurrentDirectoryPath:[[NSBundle mainBundle] bundlePath]];
    
    [fileManager changeCurrentDirectoryPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]];
    
    lua_State *L = wax_currentLuaState();
lua_atpanic(L, &wax_panic);
    
    luaL_openlibs(L); 


luaopen_wax_class(L);
    luaopen_wax_instance(L);
    luaopen_wax_struct(L);

    addGlobals(L);

[wax_gc start];
}


然后重新编译framework,再导入到我们的程序中。

http://www.cocoachina.com/bbs/read.php?tid=129723&keyword=%B2%E5%BC%FE  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在iOS上使用Objective-C实现动态壁纸功能,您可以按照以下步骤进行: 1.创建一个新的Xcode项目,并选择Single View Application模板。 2.在Assets.xcassets中创建包含动态壁纸图像的图像集。 3.在AppDelegate.m文件中添加以下代码,以在应用程序启动时注册动态壁纸: ``` - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Register for dynamic wallpapers NSDictionary *wallpaperOptions = @{UIApplicationRegisteredDefaultDynamicWallpaperOptions : @{}}; [[UIApplication sharedApplication] registerForRemoteNotificationsMatchingTypes:UIRemoteNotificationTypeNone categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeNone categories:nil]]; [[UIApplication sharedApplication] registerForRemoteNotifications]; [[UIApplication sharedApplication] registerForRemoteNotificationsWithOptions:wallpaperOptions error:nil]; return YES; } ``` 4.在Info.plist文件中添加以下键/值对,以允许应用程序在后台运行: ``` <key>UIBackgroundModes</key> <array> <string>remote-notification</string> </array> ``` 5.在AppDelegate.m文件中添加以下代码,以处理接收到的动态壁纸: ``` - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSString *dynamicWallpaperURLString = userInfo[UIApplicationDynamicWallpaperContentIdentifierKey]; NSURL *dynamicWallpaperURL = [NSURL URLWithString:dynamicWallpaperURLString]; // Download and set the dynamic wallpaper } ``` 6.下载动态壁纸图像并将其设置为应用程序的背景。您可以使用以下代码之一: a.使用UIImageView: ``` UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; imageView.contentMode = UIViewContentModeScaleAspectFill; imageView.clipsToBounds = YES; [imageView loadImageWithURL:dynamicWallpaperURL]; [self.view addSubview:imageView]; ``` b.使用CALayer: ``` CALayer *layer = [[CALayer alloc] init]; layer.contentsGravity = kCAGravityResizeAspectFill; layer.masksToBounds = YES; layer.contents = [NSData dataWithContentsOfURL:dynamicWallpaperURL]; [self.view.layer insertSublayer:layer atIndex:0]; ``` 7.运行应用程序并测试您的动态壁纸功能。 请注意,为了使动态壁纸功能正常工作,您需要在应用程序启动时注册动态壁纸,并在接收到远程通知时处理动态壁纸。您还需要确保应用程序在后台运行以接收通知。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值