An iOS/OSX bridge for sending messages between Obj-C and JavaScript in UIWebViews/WebViews

Overview

WebViewJavascriptBridge

Circle CI

An iOS/OSX bridge for sending messages between Obj-C and JavaScript in WKWebViews, UIWebViews & WebViews.

Migration Guide

When upgrading from v5.0.x to 6.0.x you will have to update the setupWebViewJavascriptBridge javascript snippet. See https://github.com/marcuswestin/WebViewJavascriptBridge#usage part 4).

Who uses WebViewJavascriptBridge?

WebViewJavascriptBridge is used by a range of companies and projects. This is a small and incomplete sample list:

Installation (iOS & OSX)

Installation with CocoaPods

Add this to your podfile and run pod install to install:

pod 'WebViewJavascriptBridge', '~> 6.0'

Manual installation

Drag the WebViewJavascriptBridge folder into your project.

In the dialog that appears, uncheck "Copy items into destination group's folder" and select "Create groups for any folders".

Examples

See the Example Apps/ folder. Open either the iOS or OSX project and hit run to see it in action.

To use a WebViewJavascriptBridge in your own project:

Usage

  1. Import the header file and declare an ivar property:
#import "WebViewJavascriptBridge.h"

...

@property WebViewJavascriptBridge* bridge;
  1. Instantiate WebViewJavascriptBridge with a WKWebView, UIWebView (iOS) or WebView (OSX):
self.bridge = [WebViewJavascriptBridge bridgeForWebView:webView];
  1. Register a handler in ObjC, and call a JS handler:
[self.bridge registerHandler:@"ObjC Echo" handler:^(id data, WVJBResponseCallback responseCallback) {
	NSLog(@"ObjC Echo called with: %@", data);
	responseCallback(data);
}];
[self.bridge callHandler:@"JS Echo" data:nil responseCallback:^(id responseData) {
	NSLog(@"ObjC received response: %@", responseData);
}];
  1. Copy and paste setupWebViewJavascriptBridge into your JS:
function setupWebViewJavascriptBridge(callback) {
	if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
	if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
	window.WVJBCallbacks = [callback];
	var WVJBIframe = document.createElement('iframe');
	WVJBIframe.style.display = 'none';
	WVJBIframe.src = 'https://__bridge_loaded__';
	document.documentElement.appendChild(WVJBIframe);
	setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
}
  1. Finally, call setupWebViewJavascriptBridge and then use the bridge to register handlers and call ObjC handlers:
setupWebViewJavascriptBridge(function(bridge) {
	
	/* Initialize your app here */

	bridge.registerHandler('JS Echo', function(data, responseCallback) {
		console.log("JS Echo called with:", data)
		responseCallback(data)
	})
	bridge.callHandler('ObjC Echo', {'key':'value'}, function responseCallback(responseData) {
		console.log("JS received response:", responseData)
	})
})

Automatic reference counting (ARC)

This library relies on ARC, so if you use ARC in you project, all works fine. But if your project have no ARC support, be sure to do next steps:

  1. In your Xcode project open project settings -> 'Build Phases'

  2. Expand 'Compile Sources' header and find all *.m files which are belongs to this library. Make attention on the 'Compiler Flags' in front of each source file in this list

  3. For each file add '-fobjc-arc' flag

Now all WVJB files will be compiled with ARC support.

Contributors & Forks

Contributors: https://github.com/marcuswestin/WebViewJavascriptBridge/graphs/contributors

Forks: https://github.com/marcuswestin/WebViewJavascriptBridge/network/members

API Reference

ObjC API

[WebViewJavascriptBridge bridgeForWebView:(WKWebVIew/UIWebView/WebView*)webview

Create a javascript bridge for the given web view.

Example:

[WebViewJavascriptBridge bridgeForWebView:webView];
[bridge registerHandler:(NSString*)handlerName handler:(WVJBHandler)handler]

Register a handler called handlerName. The javascript can then call this handler with WebViewJavascriptBridge.callHandler("handlerName").

Example:

[self.bridge registerHandler:@"getScreenHeight" handler:^(id data, WVJBResponseCallback responseCallback) {
	responseCallback([NSNumber numberWithInt:[UIScreen mainScreen].bounds.size.height]);
}];
[self.bridge registerHandler:@"log" handler:^(id data, WVJBResponseCallback responseCallback) {
	NSLog(@"Log: %@", data);
}];
[bridge callHandler:(NSString*)handlerName data:(id)data]
[bridge callHandler:(NSString*)handlerName data:(id)data responseCallback:(WVJBResponseCallback)callback]

Call the javascript handler called handlerName. If a responseCallback block is given the javascript handler can respond.

Example:

[self.bridge callHandler:@"showAlert" data:@"Hi from ObjC to JS!"];
[self.bridge callHandler:@"getCurrentPageUrl" data:nil responseCallback:^(id responseData) {
	NSLog(@"Current UIWebView page URL is: %@", responseData);
}];

[bridge setWebViewDelegate:(id)webViewDelegate]

Optionally, set a WKNavigationDelegate/UIWebViewDelegate if you need to respond to the web view's lifecycle events.

[bridge disableJavscriptAlertBoxSafetyTimeout]

UNSAFE. Speed up bridge message passing by disabling the setTimeout safety check. It is only safe to disable this safety check if you do not call any of the javascript popup box functions (alert, confirm, and prompt). If you call any of these functions from the bridged javascript code, the app will hang.

Example:

[self.bridge disableJavscriptAlertBoxSafetyTimeout];

Javascript API

bridge.registerHandler("handlerName", function(responseData) { ... })

Register a handler called handlerName. The ObjC can then call this handler with [bridge callHandler:"handlerName" data:@"Foo"] and [bridge callHandler:"handlerName" data:@"Foo" responseCallback:^(id responseData) { ... }]

Example:

bridge.registerHandler("showAlert", function(data) { alert(data) })
bridge.registerHandler("getCurrentPageUrl", function(data, responseCallback) {
	responseCallback(document.location.toString())
})
bridge.callHandler("handlerName", data)
bridge.callHandler("handlerName", data, function responseCallback(responseData) { ... })

Call an ObjC handler called handlerName. If a responseCallback function is given the ObjC handler can respond.

Example:

bridge.callHandler("Log", "Foo")
bridge.callHandler("getScreenHeight", null, function(response) {
	alert('Screen height:' + response)
})
bridge.disableJavscriptAlertBoxSafetyTimeout()

Calling bridge.disableJavscriptAlertBoxSafetyTimeout() has the same effect as calling [bridge disableJavscriptAlertBoxSafetyTimeout]; in ObjC.

Example:

bridge.disableJavscriptAlertBoxSafetyTimeout()
Comments
  • WKWebView Support

    WKWebView Support

    I've added support for WKWebView which was requested in issue #84.

    How does it work: WKWebView support is opt-in. In order to use WKWebView you need to instantiate the WKWebViewJavascriptBridge. The rest of the WKWebViewJavascriptBridge API is the same as WebViewJavascriptBridge.

    1. Import the header file:
    #import "WKWebViewJavascriptBridge.h"
    
    1. Instantiate WKWebViewJavascriptBridge and with a WKWebView object
    WKWebViewJavascriptBridge* bridge = [WKWebViewJavascriptBridge bridgeForWebView:webView handler:^(id data, WVJBResponseCallback responseCallback) {
        // etc
    }];
    

    Where to start Take a look at the WKWebViewJavascriptBridge.m file first as it has most of the logic. The two important differences are that the delegates for WKWebView have been changed and that the response for evaluating Javascript is now returned in a callback.

    | UIWebView | WKWebView Equivalent | | --- | --- | | didFailLoadWithError | didFailNavigation | | webViewDidFinishLoad | didFinishNavigation | | webViewDidStartLoad | didStartProvisionalNavigation | | shouldStartLoadWithRequest | decidePolicyForNavigationAction |

    How to test this Pull down the branch and try to run the example application. Try running it in XCode 5 and 6 to test out iOS7 and iOS8 respectively. If you're using Pods, point to this branch and see if it works in one of your existing apps.

    Extra

    1. Can someone please test this out on OSX 10.10? I don't have a machine currently running Yosemite.
    2. I'm also currently testing this against a bigger iOS project, Stacker, in the feature/wkwebkit branch to make sure WebViewJavascriptBridge works as advertised.
    3. I think there's lots of room to DRY up the code between WebViewJavascriptBridge and WKWebViewJavascriptBridge however I think that should be left for another PR.
    opened by lokimeyburg 46
  • I get crash in iOS11 .....

    I get crash in iOS11 .....

    'Completion handler passed to -[WKWebViewJavascriptBridge webView:decidePolicyForNavigationAction:decisionHandler:] was not called'

    reason: 'Completion handler passed to -[WKWebViewJavascriptBridge webView:decidePolicyForNavigationAction:decisionHandler:] was called more than once'

    How to resolve this problem ?? thank you .

    WVJB Bug Report

    Thanks for reporting an issue with WebViewJavascriptBridge.

    Do these 4 things and I will fix your problem!

    1. Go to https://github.com/marcuswestin/WebViewJavascriptBridge and click Fork.
    2. Clone your fork, cd into it and run make test. All tests should pass!
    3. Edit Tests/WebViewJavascriptBridgeTests/BridgeTests.m and create a new, failing test which demostrates your issue.
    4. Create a pull request for https://github.com/marcuswestin/WebViewJavascriptBridge

    That's it!

    I will take it from there and promise that I'll fix your problem ASAP.

    If you don't do this then I can't help you!

    And I probably won't :)

    Cheers, @marcuswestin

    opened by huanghualove 41
  • Return values for native functions called from JS

    Return values for native functions called from JS

    First of all, thanks for this great library! It works great :)

    I was wondering if you've got any idea about how to implement returning values to JS from native calls. I've not been able to come up with a good solution so far, but it'd be awesome to be able to calla a native Obj-C function and get a return value back.

    opened by tanis2000 22
  • Porting to WKWebView

    Porting to WKWebView

    It was good to work with WVJsBrige as a component for fluid interop between native and web code. I'd love to continue using WKWebView as I port the reference WebView-based app framework for our products and client projects.

    Until 10.10 becomes stable enough to develop in, we can use the iOS 8 SDK to start working on a port. I'd like to start one soon, and would love to hear from you regarding how you'd plan out an attack. Any feedback or advice would be welcome here.

    opened by sohocoke 19
  • Completion handler passed to -[WKPrivateNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:] was called more than once

    Completion handler passed to -[WKPrivateNavigationDelegate webView:decidePolicyForNavigationAction:decisionHandler:] was called more than once

    - (void)webView:(WKWebView *)webView
    decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
    decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
        if (webView != _webView) { return; }
        NSURL *url = navigationAction.request.URL;
        __strong typeof(_webViewDelegate) strongDelegate = _webViewDelegate;
    
        if ([_base isCorrectProcotocolScheme:url]) {
            if ([_base isBridgeLoadedURL:url]) {
                [_base injectJavascriptFile];
            } else if ([_base isQueueMessageURL:url]) {
                [self WKFlushMessageQueue];
            } else {
                [_base logUnkownMessage:url];
            }
            **decisionHandler(WKNavigationActionPolicyCancel);     //  executed**
        }
        
        if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) {
            **[_webViewDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];          //  executed** 
        } else {
            decisionHandler(WKNavigationActionPolicyAllow);
        }
    }
    

    I implement the selector @selector(webView:decidePolicyForNavigationAction:decisionHandler:) and execute "decisionHandler(WKNavigationActionPolicyAllow);"

    It seems the decisionHandler can be called twice and cause the crash. No such thing has happened before...

    opened by lianweiqin 15
  • 'webViewDidFinishLoad' did not call when use

    'webViewDidFinishLoad' did not call when use "webViewDelegate:self" as documented

    There is not error any more. Webview load url completely but not trigger call webViewDidFinishLoad

    System: IOS7, iPhone4s

    DetailViewController.h

    #import <UIKit/UIKit.h>
    
    @interface DetailViewController : UIViewController<UIWebViewDelegate>
    
    @property (strong, nonatomic) id detailId;
    @property (strong, nonatomic) id detailTitle;
    
    @property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
    
    @end
    

    DetailViewController.m

    
    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
        NSLog(@"Hide loading animation");
        [MBProgressHUD hideHUDForView:self.view animated:YES];
    }
    
    - (void)viewDidLoad
    {
        UIWebView *webView = [viewController webView];
        [[webView scrollView] setBounces:NO];  
        [WebViewJavascriptBridge enableLogging];
        WebViewJavascriptBridge* bridge = [WebViewJavascriptBridge bridgeForWebView:webView webViewDelegate:self handler:^(id data, WVJBResponseCallback responseCallback) {
            NSLog(@"Received message from javascript: %@", data);
            if (responseCallback) {
                responseCallback(@"Right back atcha");
            }
        }];
    }
    
    opened by giver 11
  • Can this be used with a UIViewController?

    Can this be used with a UIViewController?

    Hi,

    I'm trying to build a Hybrid app using the bridge (I'm literally a few days old in iOS dev) .

    have a tabbar navigation based app, and I'm using a UIViewController for each tab view, one of the tab would use the WebView. I wast sure if I could implement WebViewJavascriptBridgeDelegate in a UIViewController class like below.

    @interface CurrentTimeViewController : UIViewController <UIWebViewDelegate, WebViewJavascriptBridgeDelegate>

    I get a EXC_BAD_ACC during runtime in the main class

    int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }

    Any pointer would be much appreciated. -Imran

    opened by imranansari 11
  • setTimeout in WebViewJavascriptBridge is causing performance problems

    setTimeout in WebViewJavascriptBridge is causing performance problems

    We use WebViewJavascriptBridge heavily in our app, and we are running into a performance problem. It is taking between 200 and 1000 milliseconds (occasionally more) to send a group of messages from Objective-C and get their callback responses. I was able to get approximately a 10-fold decrease in the amount of time it takes to get a response by removing the setTimeout wrapper in _dispatchMessageFromObjC. I would like to submit a PR to make it so we can run without the setTimeout. Do you have a suggestion on how? Remove it entirely? Make a flag a parameter to bridgeForWebView?

    Feature Proposal 
    opened by jordanpwood 10
  • Installing 4.1.3 via CocoaPods

    Installing 4.1.3 via CocoaPods

    Hi!

    Could you please push the latest podspec (v 4.1.3) to the CocoaPods Trunk? As I see today the most recent version of the library in the cocoapods/specs repo is 4.1.0, but looks like you have 4.1.3 already tagged. I would be happy to use pod 'WebViewJavascriptBridge', '4.1.3' to get the latest version of the library.

    In case you haven't yet setup with Trunk, then this article might be useful: Getting setup with Trunk. And here is an old blog post which is also might be useful CocoaPods Trunk.

    Thanks in advance!

    opened by yas375 10
  • How to  get data asynchronously and transfer to javascript

    How to get data asynchronously and transfer to javascript

    I used AFNetWorking to fetch data from remote service API, when the data ready, I tried to transfer the data back to javascript, but it raise an error. Any advice is appreciate. My code look like this.

    ^(id data, WVJBResponseCallback responseCallback) {
                NSLog(@"data: %@", data);
                NSString *service = [data objectForKey:@"service"];
                BOOL needLogin = [[data objectForKey:@"needLogin"] boolValue];
                NSDictionary *businessParams = [data objectForKey:@"businessParams"];
    
                [[AHAPIClient sharedClient] consumeRemoteService:service
                                                       needLogin:needLogin
                                                  withParameters:businessParams
                                                         success:^(id JSON) {
                                                             responseCallback(JSON);
                                                         }
                                                         failure:^(NSError *error) {
                                                             responseCallback(error.userInfo);
                                                         }];
    }
    
    opened by chenfengbri 10
  • Why the html content be loaded twice?

    Why the html content be loaded twice?

    I code the test program. the .h file is

    // // ViewController.h // test // // Created by remote roamer on 12-5-3. // Copyright (c) 2012年 MyCompanyName. All rights reserved. //

    import <UIKit/UIKit.h>

    import "WebViewJavascriptBridge.h"

    import "AppDelegate.h"

    @class AppDelegate;

    @interface ViewController : UIViewController < WebViewJavascriptBridgeDelegate > { IBOutlet UIWebView * webView; }

    @property(retain,nonatomic) UIWebView * webView;

    @property(retain,nonatomic) WebViewJavascriptBridge * javascriptBridge;

    @property(nonatomic,retain) NSBundle* bundle ;

    @end

    the .m file :

    // // ViewController.m // test // // Created by remote roamer on 12-5-3. // Copyright (c) 2012年 MyCompanyName. All rights reserved. //

    import "ViewController.h"

    @interface ViewController ()

    @end

    @implementation ViewController @synthesize webView; @synthesize bundle; @synthesize javascriptBridge;

    -(void) javascriptBridge:(WebViewJavascriptBridge *)bridge receivedMessage:(NSString *)message fromWebView:(UIWebView *)webView {

    }

    -(void) webViewDidStartLoad:(UIWebView *)webView { NSLog(@"loading html start"); //[MBProgressHUD showHUDAddedTo:self.webView animated:YES]; }

    -(void) webViewDidFinishLoad:(UIWebView *)webView { NSLog(@"load html finish."); //[MBProgressHUD hideHUDForView:self.webView animated:YES]; }

    -(void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { NSLog(@"load html error:%@",error); //[MBProgressHUD hideHUDForView:self.webView animated:YES]; }

    • (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization NSLog(@"initWithNibName"); //self.javascriptBridge = [WebViewJavascriptBridge javascriptBridgeWithDelegate: (AppDelegate *)([UIApplication sharedApplication]).delegate]; self.javascriptBridge = [WebViewJavascriptBridge javascriptBridgeWithDelegate:self];

      } return self; }

    • (void)viewDidLoad { [super viewDidLoad]; NSLog(@"viewDidLoad");

      //self.webView.delegate = self; self.webView.delegate = self.javascriptBridge; self.bundle = [NSBundle mainBundle]; [webView loadHTMLString:@"aaa" baseURL:[NSURL fileURLWithPath:[bundle bundlePath]]];

      // Do any additional setup after loading the view, typically from a nib. }

    • (void)viewDidUnload {

      [super viewDidUnload]; // Release any retained subviews of the main view. }

    • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; }

    @end

    When I run it , the logger info in console is :

    2012-05-03 20:11:06.777 test[14860:f803] initWithNibName 2012-05-03 20:11:06.791 test[14860:f803] viewDidLoad 2012-05-03 20:11:06.813 test[14860:f803] loading html start 2012-05-03 20:11:06.836 test[14860:f803] loading html start 2012-05-03 20:11:06.837 test[14860:f803] load html finish. 2012-05-03 20:11:06.840 test[14860:f803] load html finish.

    Why the html connent loaded twice?

    ps: I‘m using the xcode 4.3.2 and the sdk is 5.1

    opened by roamerxv 10
  • 我已经重构了这个库,10分钟就能完成接入,也许可以帮助你.

    我已经重构了这个库,10分钟就能完成接入,也许可以帮助你.

    我已经重构了这个库,10分钟就能完成接入,也许可以帮助你.  OC: https://github.com/SDBridge/SDBridgeOC  Swift: https://github.com/SDBridge/SDBridgeSwift Java: https://github.com/SDBridge/SDBridgeJava  Kotlin: https://github.com/SDBridge/SDBridgeKotlin 而且还有h5端参考对接的Demo https://github.com/SDBridge/TypeScriptDemo

    opened by housenkui 0
  • I have redesigned new libraries, It only takes ten minutes to complete . Maybe can help you.

    I have redesigned new libraries, It only takes ten minutes to complete . Maybe can help you.

    I have redesigned new libraries, It only takes ten minutes to complete . Maybe can help you. OC: https://github.com/SDBridge/SDBridgeOC Swift: https://github.com/SDBridge/SDBridgeSwift

    opened by housenkui 0
  • Mac OSX app Packages printed in version 10.15 and above crashed in system 10.14 and below, so far the problem has not been located

    Mac OSX app Packages printed in version 10.15 and above crashed in system 10.14 and below, so far the problem has not been located

    WVJB Bug Report

    Thanks for reporting an issue with WebViewJavascriptBridge.

    Do these 4 things and I will fix your problem!

    1. Go to https://github.com/marcuswestin/WebViewJavascriptBridge and click Fork.
    2. Clone your fork, cd into it and run make test. All tests should pass!
    3. Edit Tests/WebViewJavascriptBridgeTests/BridgeTests.m and create a new, failing test which demostrates your issue.
    4. Create a pull request for https://github.com/marcuswestin/WebViewJavascriptBridge

    That's it!

    I will take it from there and promise that I'll fix your problem ASAP.

    If you don't do this then I can't help you!

    And I probably won't :)

    Cheers, @marcuswestin

    opened by Moxu123 1
  • iOS 15.4 js 交互不走decidePolicyFor 这个代理方法了

    iOS 15.4 js 交互不走decidePolicyFor 这个代理方法了

     func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)  这个回调不走了 只有iOS15.4 有这个问题
    
    opened by XiaBaKe 2
Owner
Marcus Westin
Technical founder, CTO and product architect. I love rapidly taking a product from 0 to launch, designing and coding much of it myself.
Marcus Westin
A framework for sharing code between iOS and OS X

MAIKit MAIKit (Mac and iOS Kit) is a framework for sharing code between OS X and iOS. UIKit contains many classes which have counterparts in Appkit. T

Michael Buckley 139 Jun 29, 2022
JSPatch bridge Objective-C and Javascript using the Objective-C runtime. You can call any Objective-C class and method in JavaScript by just including a small engine. JSPatch is generally used to hotfix iOS App.

JSPatch 中文介绍 | 文档 | JSPatch平台 请大家不要自行接入 JSPatch,统一接入 JSPatch 平台,让热修复在一个安全和可控的环境下使用。原因详见 这里 JSPatch bridges Objective-C and JavaScript using the Object

bang 11.4k Jan 1, 2023
Simple Design for Swift bridge with Javascript. Also can get javascript console.log.

SDBridgeOC is here. If your h5 partner confused about how to deal with iOS and Android. This Demo maybe help. YouTube video is here. bilibili Video is

null 20 Dec 28, 2022
Snapify is an opensource tweak to make the messages app behave like Snapchat's sending system

Snapify A simple tweak to remove the send button in messages, replaced by keyboard key What is Snapify? Snapify is an opensource tweak to make the mes

Hallie 4 Oct 29, 2021
Bridge between onfido-auth and react-native

react-native-onfido-auth-sdk Table of contents Overview Installation Usage 1. Creating the SDK configuration 2. Parameter details 3. Success Response

null 1 Mar 30, 2022
The SwiftUI Messages Clone consists of layout and composition clones of the iOS Messages app.

The SwiftUI Messages Clone consists of layout and composition clones of the iOS Messages app. It has Messages-like bubble and screen effects, reactions, and animations, all created with SwiftUI.

Stream 20 Dec 24, 2022
Mathias Köhnke 1.1k Dec 16, 2022
WebDomHandling - A Swift Package for handling JavaScript code between WebKit and Swift implemented by WebKit

WebDomHandling A Swift Package for handling JavaScript code between WebKit and S

null 0 Jan 23, 2022
Swift toolkit for passing messages between iOS apps and extensions.

_________ ___ ___ _ _____ _________ ___ ___ / / \ \ / / |_| ( ___ \ \__ __/ \ \ / / / _____/ \ \ /\ /

Abdullah Selek 58 Nov 3, 2022
Fluetooth - Flutter library for sending bytes to Bluetooth devices on Android/iOS

A Flutter library for sending bytes to Bluetooth devices. Available on Android a

Iandi Santulus 1 Jan 2, 2022
OpenTok Text Chat Accelerator Pack enables text messages between mobile or browser-based devices.

Text Chat Accelerator Pack iOS This project is deprecated The OpenTok Text Chat Accelerator Pack for iOS project is now a part of Accelerator Core iOS

OpenTok 13 Jan 26, 2022
OS X app for sending push with Apple Push Notification service (APNs)

pushHandle OS X app for sending push with Apple Push Notification service (APNs) About This app was created just to allow painless testing of push not

hbk3 3 Nov 17, 2022
Pushkin is a free open source tool for sending push notifications

Unmaintained This repository is no longer maintained. Pushkin Introduction Pushkin is a free open source tool for sending push notifications. It was d

Nordeus 257 Nov 3, 2022
React Native utility library around image and video files for getting metadata like MIME type, timestamp, duration, and dimensions. Works on iOS and Android using Java and Obj-C, instead of Node 🚀.

Qeepsake React Native File Utils Extracts information from image and video files including MIME type, duration (video), dimensions, and timestamp. The

Qeepsake 12 Oct 19, 2022
Sample projects for using .NET and Swift with SourceGear Bridge

bridge-samples-swift This repo contains various sample projects which show using .NET and Swift with SourceGear Bridge. (Note that SourceGear Bridge i

SourceGear LLC 3 Nov 30, 2021
This provides a bridge to use Sync with Tokamak instead of SwiftUI

Sync Tokamak This provides a bridge to use Sync with Tokamak instead of SwiftUI.

Mathias Quintero 5 May 7, 2022
XLForm is the most flexible and powerful iOS library to create dynamic table-view forms. Fully compatible with Swift & Obj-C.

XLForm By XMARTLABS. If you are working in Swift then you should have a look at Eureka, a complete re-design of XLForm in Swift and with more features

xmartlabs 5.8k Jan 6, 2023
Simply the fastest way to transmit data between iOS/tvOS and OSX

DarkLightning DarkLightning is a lightweight Swift library to allow data transmission between iOS/tvOS devices (Lightning port, Dock connector, USB-C)

Jens Meder 318 Nov 29, 2022
Swift/Obj-C HTTP framework with a focus on REST and JSON

Now Archived and Forked PMHTTP will not be maintained in this repository going forward. Please use, create issues on, and make PRs to the fork of PHMT

Postmates Inc. 509 Sep 4, 2022
Cocoa framework and Obj-C dynamism bindings for ReactiveSwift.

Reactive extensions to Cocoa frameworks, built on top of ReactiveSwift. ⚠️ Looking for the Objective-C API? ?? Migrating from RAC 4.x? ?? Release Road

null 20k Jan 8, 2023