An XMPP Framework in Objective-C for Mac and iOS

Overview

XMPPFramework

XMPPFramework

Build Status Version Status Carthage compatible Platform License (3-Clause BSD)

An XMPP Framework in Objective-C for the Mac and iOS development community.

Abstract

XMPPFramework provides a core implementation of RFC-3920 (the XMPP standard), along with the tools needed to read & write XML. It comes with multiple popular extensions (XEP's), all built atop a modular architecture, allowing you to plug-in any code needed for the job. Additionally the framework is massively parallel and thread-safe. Structured using GCD, this framework performs well regardless of whether it's being run on an old iPhone, or on a 12-core Mac Pro. (And it won't block the main thread... at all)

Install

The minimum deployment target is iOS 8.0 / macOS 10.9 / tvOS 9.0.

Migration from 3.7 to 4.0

There have been a number of changes to the public API of XMPPFramework in an attempt to improve the ergnomics and safety when used with Swift. Most Objective-C projects should require no changes, with a few minor exceptions. Many (simple) changes will be required for pure Swift projects, mostly due to the new nullability annotations. The process is still not complete so please submit issues and help if possible to minimize future breaking changes.

  • Swift Support in XMPPFrameworkSwift.framework and XMPPFramework/Swift subspec

  • Modern Objective-C Syntax: Nullability annotations and generics.

  • Most of Core, Authentication, Categories, and Utilities have been audited. Additional help is needed for Extensions.

  • XMPPJID bareJID is now imported into Swift as bareJID instead of bare to prevent conflict with bare String. Also applies to domainJID.

  • XMPPPresence intShow has been renamed showValue and is now an XMPPPresenceShow enum instead of int. This will be a warning in 4.0 but will be removed in 4.1.

  • The XMPPMessage chatState string value is now imported into Swift as a native Swift String enum when using the Swift extensions. A new chatStateValue property is provided for accessing the raw String value in both Swift and Obj-C.

  • Readonly properties are used instead of getter methods where applicable. Getter naming overrides for properties have been removed to reflect Apple's approach.

  • The following modules still need an audit. If you use these modules please help out and contribute some time to audit them and submit a pull request, otherwise their API may contain breaking changes in future releases.

    • XEP-0191 Blocking
    • XEP-0199 Ping
    • XEP-0202 Time
    • XEP-0136 Archiving
    • XEP-0115 Capabilities (CoreDataStorage unaudited)
    • XEP-0045 MUC (Storage unaudited)
    • XEP-0054 vCardTemp (CoreDataStorage unaudited)
    • XEP-0016 Privacy
    • XEP-0012 Last Activity
    • XEP-0009 RPC
    • Roster (Storage unaudited)
    • XMPPGoogleSharedStatus
    • FileTransfer
    • CoreDataStorage
    • BandwidthMonitor

Swift Support

XMPPFramework is now accepting contributions written in Swift, with some limitations. Swift code must be isolated in the Swift/ folder, and none of the existing or future Obj-C code may depend upon it. All public APIs written in Swift must be Obj-C compatible and marked with @objc.

See the Contributing section below for more details.

CocoaPods

The easiest way to install XMPPFramework is using CocoaPods.

To install only the Objective-C portion of the framework:

pod 'XMPPFramework'

To use the new Swift additions:

use_frameworks!
pod 'XMPPFramework/Swift'

After pod install open the .xcworkspace and import:

@import XMPPFramework;   // Objective-C
import XMPPFramework     // Swift

Carthage

To integrate XMPPFramework into your Xcode project using Carthage, specify it in your Cartfile:

github "robbiehanson/XMPPFramework"

Run carthage to build the framework and drag the built XMPPFramework.framework into your Xcode project. If you'd like to include new features written in Swift, drag XMPPFrameworkSwift.framework into your project as well. You'll need to manually import XMPPFrameworkSwift in your headers.

Contributing

Pull requests are welcome! If you are planning a larger feature, please open an issue first for community input. Please use modern Objective-C syntax, including nullability annotations and generics. Here's some tips to make the process go more smoothly:

  • Make sure to add any new files to the iOS, macOS, and tvOS targets for XMPPFramework.framework in XMPPFramework.xcodeproj, and ensure any applicable header files are set to public.
  • Please try to write your code in a way that's testable. Using XMPPMockStream makes testing pretty easy. Look at examples in Testing-Shared for inspiration.
  • You will need both CocoaPods and Carthage to work on tests. Run carthage checkout in the root of the repository, and bundle install && bundle exec pod install in the Testing-iOS and Testing-macOS folders.
  • Create your test files to the Testing-Shared folder, and then add them to the iOS, macOS, and tvOS targets in Testing-Carthage/XMPPFrameworkTests.xcodeproj, Testing-macOS/XMPPFrameworkTests.xcworkspace and Testing-iOS/XMPPFrameworkTests.xcworkspace.
  • If you plan on writing Swift code, please keep it isolated in the Swift/ folder, and ensure none of the pure Obj-C code has dependencies on it. All public APIs must be Obj-C compatible and marked with @objc. Remember to add your files to the XMPPFrameworkSwift.framework target. Ensure that all your unit tests pass for both the CocoaPods and Carthage integrations. For an example, look at Testing-Carthage/XMPPFrameworkSwiftTests.xcodeproj, Testing-Swift/SwiftOnlyTest.swift, and the XMPPFrameworkSwiftTests targets within Testing-macOS and Testing-iOS.

Looking to help but don't know where to start?

  • A large portion of the framework is not yet annotated for nullability and generics.
  • Adding more test coverage is always appreciated
  • Modernizing the old Examples projects

Security Issues

If you find a security problem, please do not open a public issue on GitHub. Instead, email one of the maintainers directly:

Wiki:

For more info please take a look at the wiki.

Can't find the answer to your question in any of the wiki articles? Try the mailing list.

Donation:

Love the project? Wanna buy me a ☕️ ? (or a 🍺 😀 ):

donation-bitcoin donation-paypal

Comments
  • XMPPFramework does not send keep alive in background even with enableBackgroundingOnSocket set to TRUE !

    XMPPFramework does not send keep alive in background even with enableBackgroundingOnSocket set to TRUE !

    I think the title is illustrating enough. I want XMPPFramework to work ( like a service ) in background and receive messages even when app is not in active state. I have set xmppStream.enableBackgroundingOnSocket = YES; But no progress here. The app goes to background, it still receives messages ( and shows notifications ) for a few seconds, but if it be inactive for a few seconds ( and idle also ( no incoming message ) ) it would no longer work in the background. I have trying logging and saw that the app is sending keep-alive packets, within a few seconds after receiving last message ( last activity ) , but if there be no activity for a few time, it stops sending keep-alives and the app wouldn't be notified and work anymore. Just in case it matters, I have set "keep alive sending interval" to 5 seconds.

    I really appreciate any quick help. Thanks a lot

    opened by sanctioned-account 89
  • XMPP socket fails to connect when connected to a IPv6 only network

    XMPP socket fails to connect when connected to a IPv6 only network

    Apple recently announced that Starting June 1, 2016 all apps submitted to the App Store must support IPv6-only networking. I set up a network following Apple's documentation instructions in [https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW16], and when trying to use the library the GCDAsyncSocket socket fails to connect. After investigating a bit the issue seems to be that the XMPP server is returning both IPv4 and IPv6 addresses, but the socket is only trying to connect with the preferred one, which is IPv4. When it fails to connect, it does not retry with the IPv6 address.

    I'm not really sure if this is an issue that should be fixed in the GCDAsyncSocket library or here in the XMPP one. A possible solution would be to set IPv6 as the preferred address, but right now that is not possible as the XMPPStream class is not exposing the socket as a property, nor does it provide a method to set this configuration.

    Any help and guidance is really appreciated

    opened by polmum 76
  • libxmlSimu not found when upgrading XMPPFramework to 3.6.6 via cocoapods

    libxmlSimu not found when upgrading XMPPFramework to 3.6.6 via cocoapods

    I guys I found this issue when upgrading to the latest version of XMPPFramework. ClassName: DDXMLNode.h Module: KissXML

    #if !(TARGET_IPHONE_SIMULATOR)
    @import libxml;
    #else
    @import libxmlSimu;
    #endif
    

    Compiler mark line 4 with an error explaining: Module 'libxmlSimu' not found.

    How can I solve this issue? Thanks a lot, Dario

    opened by d4r1091 59
  • XMPP last activity time shows in strange form. How to fix it?

    XMPP last activity time shows in strange form. How to fix it?

    I have added to the Bridging file XMPPLastActivity.h file and in Swift file I did the next:

    let abc = XMPPLastActivity()
    let a = abc.sendLastActivityQueryToJID(user.jid)
    print("A is: \(a)")
    

    but it returns me response like

     1686F740-C50C-477B-BAE2-02C897826B97
    

    How can I return it in human readable format?

    opened by orkhanalizade 51
  • Login-->logout-->login problem using oldSchoolSecureConnect method

    Login-->logout-->login problem using oldSchoolSecureConnect method

    First, sorry for my bad English. I'm using XMPPFramework(version3.6) to write a ios program. As the title mentioned, the second time when i logged in, In the "xmppStreamDidDisconnect:withError:" delegate method, i got below error: error=[Error Domain=GCDAsyncSocketErrorDomain Code=4 "Read operation timed out" UserInfo=0x1c5e54a0 {NSLocalizedDescription=Read operation timed out}]

    Note: it's not always happen, sometimes, i could log in again. But most of the time i got above errors.

    in the program, what i'm doing is as below:

    1. call oldSchoolSecureConnect method to login. ※Because i'm using 55223 as the port number.
    2. call goOffline(send presence to unavailable), and then disconnectAfterSending to logout.
    3. call oldSchoolSecureConnect method again to login.

    the source code like below: ====================Initialization=======================

    xmppStream = [XMPPStream alloc] init];
    [xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];
    
    [xmppStream setHostName:@"xxxx"];
    [xmppStream setHostPort:55223];
    
    allowSelfSignedCertificates = YES;
    allowSSLHostNameMismatch = YES;
    

    ====================connect/disconnect=======================

    - (BOOL)connect
    {
        if (![xmppStream isDisconnected]) return YES;
    
        [xmppStream setMyJID:[XMPPJID jidWithString:@"xxxx@xxxx"]];
        password = myPassword;
    
        NSError *error = nil;
        if (![xmppStream oldSchoolSecureConnect :&error])
        {
            //do something
    
            return NO;
        }
    
        return YES;
    }
    
    - (void)disconnect
    {
            [self goOffline];
            [xmppStream disconnectAfterSending];
    }
    

    ====================xmppstream delegate=======================

    - (void)xmppStreamDidConnect:(XMPPStream *)sender
    {
        DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    
        isXmppConnected = YES;
    
        NSError *error = nil;
    
        if (![[self xmppStream] authenticateWithPassword:password error:&error])
        {
            DDLogError(@"Error authenticating: %@", error);
        }
    }
    
    - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
    {
        DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);
    
        [self goOnline];
    }
    
    - (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error
    {
        DDLogVerbose(@"%@: %@, error=[%@]", THIS_FILE, THIS_METHOD, error);
    
        if (!isXmppConnected)
        {
            DDLogError(@"Unable to connect to server. Check xmppStream.hostName");
        }
    }
    

    Could anyone help me to solve this problem? Thanks in advanced.

    opened by haifenghuang 33
  • Added XEP-0138 Stream Compression support to XMPPFramework

    Added XEP-0138 Stream Compression support to XMPPFramework

    1. Separated XMPPStream internal Extension into the XMPPStreamInternal.h, which could be called from XMPPFeature;
    2. Moved asyncSocket write/read data into a wrapper method -[XMPPStream write/readData ...], in which a registeredStreamPreprocessor could do preprocess (eg, XMPPCompression could deflate / inflate data);
    3. Added XMPPFeature into calling procedure for XMPPStream;
    4. Added XMPPCompression feature, which applies to XEP-0138 Stream Compression
    5. Added XMPPCompression support into DesktopXMPP and iPhoneXMPP projects
    

    Tested on OpenFire 3.8.2 and ejabbared 2.1.13

    I accidently removed the branch and it caused this pull request closed. please add new comment to #563

    opened by sprhawk 22
  • "Socket closed by remote peer" - GCDAsyncSocket Error Code 7

    After a period of inactivity, the stream disconnects with the following error:

    Error Domain=GCDAsyncSocketErrorDomain Code=7 "Socket closed by remote peer" UserInfo=0x7ff222d0ce90 {NSLocalizedDescription=Socket closed by remote peer}, {
        NSLocalizedDescription = "Socket closed by remote peer";
    }
    

    The XMPPReconnect module reconnects to the server, but it goes into an infinite loop of periodically disconnecting (with the above error) and reconnecting, and even after reconnecting it doesn't receive any more data from the server until the stream is explicitly disconnected and connected again. I found some old discussion on this issue but wasn't sure if it was still relevant:

    https://groups.google.com/forum/#!msg/xmppframework/6RZY3fN73_w/nv8fEGgJiQUJ

    Thanks.

    opened by indragiek 22
  • Initial XEP-0198 support

    Initial XEP-0198 support

    What is done:

    • Basic acking scenario - acks and error handling
    • Resumption
    • XMPPStreamManagement module (but most logic done in XMPPStream.m, is it possible to move something in extension module?)
    • XMPPRoster module modified not to reset roster on disconnect when stream management enabled
    • Session data (Session ID and packet counters) saved and restored from NSUserDefaults (Will it make problems with multiple XMPPStreams application?)

    TODO:

    started 
    opened by vitalyster 19
  • ioq_select  Attempting to replace UDP socket when iphone is locked

    ioq_select Attempting to replace UDP socket when iphone is locked

    Hi,

    -I'm using XMPPFramework for chat messaging on IOS.

    -I have problem when application waking more than 15 times in 300 seconds when iphone is locked.

    -The application can only run on the background only if the iphone is not locked.

    -Base on the log I found this message: ioq_select Attempting to replace UDP socket 9 ioq_select UDP has been replaced successfully!

    -It seems that iphone reset the connection opened by XMPPFramework. -Does XMPPFramework support application running on the background while iphone is locked?

    Appreciate if anyone can help on this.

    Regards,

    opened by asrafarifin78 19
  • Doesn't work XMPP connection in the background in iOS10

    Doesn't work XMPP connection in the background in iOS10

    In iOS 9 all worked fine, after updating to iOS10, account becomes offline after the lock screen on iPhone.

    self.xmppStream.enableBackgroundingOnSocket = YES;

    2016-09-23 17 27 41
    opened by x3mall1986 18
  • "No suitable authentication method found" error

    I have tried to authenticate on secured openfire server from iOS using XMPP. It's connected successfully, but it did not get authenticate and i have received following error :

    Error Domain=XMPPStreamErrorDomain Code=4 "No suitable authentication method found" UserInfo=0x79726370 {NSLocalizedDescription=No suitable authentication method found}

    Is there any solution for it?

    opened by sunil-zalavadiya 17
  • XMPPFramework crash in iOS 16 and Xcode 14

    XMPPFramework crash in iOS 16 and Xcode 14

    hello, XMPPFramework runs iOS16, crashes on Xcode14 device, the error is like a screenshot, please help to update and solve it, thank you very much, XMPPFramework is great! WeChate999a946a8c4024d342e74da6d1e6308

    opened by zhangylios 5
  • cocoa async socket crash in iOS 16 and Xcode 14

    cocoa async socket crash in iOS 16 and Xcode 14

    Hi team, we are facing a crash when we upgraded to Xcode 14 and iOS 16 when we call the connection method

    [xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]

    it leads straight to the cocoa async socket dependency and crashes every time, attempted to make the connection.

    we check with the latest version

    • XMPPFramework/default (4.0.0):
      • CocoaAsyncSocket (~> 7.6)

    but we're still getting the same crash.

    Please provide us with your support, thanks.

    opened by johnkennethcontus 0
  • How can we enable secure communication with Openfire 5223 port

    How can we enable secure communication with Openfire 5223 port

    We are using Openfire as our backend server and enabled with 5223 port for secure communication, What are the steps to enable 5223 communication ?

    Thanks

    opened by fowzaj 0
  • Crashes with XMPPStreamManagement

    Crashes with XMPPStreamManagement

    Hi,

    I can see multiple crashes in my organizer window for the XMPPStreamManagement.m class after enabling stream management. They aren't reproducible for me but these have been reported by different app users as well. I'm attaching the logs for the stack trace below:

    Crash # 1 Exception Type: EXC_CRASH (SIGKILL) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Reason: FRONTBOARD 2343432205 <RBSTerminateContext| domain:10 code:0x8BADF00D explanation:[application<com.banksalaam.waafi>:65028] failed to terminate gracefully after 5.0s ProcessVisibility: Background ProcessState: Running WatchdogEvent: process-exit WatchdogVisibility: Background WatchdogCPUStatistics: ( "Elapsed total CPU time (seconds): 8.710 (user 7.470, system 1.240), 26% CPU", "Elapsed application CPU time (seconds): 5.601, 17% CPU" ) reportType:CrashLog maxTerminationResistance:Interactive>

    Triggered by Thread: 0

    Thread 0 name: Thread 0 Crashed: 0 libsystem_malloc.dylib 0x0000000192c44fb4 nanov2_allocate_from_block + 116 (nanov2_malloc.c:0) 1 libsystem_malloc.dylib 0x0000000192c4421c nanov2_allocate + 128 (nanov2_malloc.c:2591) 2 libsystem_malloc.dylib 0x0000000192c4480c nanov2_calloc + 160 (nanov2_malloc.c:1072) 3 libsystem_malloc.dylib 0x0000000192c33084 _malloc_zone_calloc + 88 (malloc.c:1638) 4 libobjc.A.dylib 0x0000000199784df0 objc_rootAllocWithZone + 40 (objc-runtime-new.mm:8037) 5 XMPPFramework 0x0000000103bdb784 -[XMPPStreamManagementOutgoingStanza copyWithZone:] + 28 (XMPPStreamManagementStanzas.m:39) 6 CoreFoundation 0x0000000180ed252c -[NSArray initWithArray:range:copyItems:] + 300 (NSArray.m:738) 7 CoreFoundation 0x0000000180ed7bc8 -[__NSPlaceholderArray initWithArray:copyItems:] + 108 (NSPlaceholderArray.m:125) 8 XMPPFramework 0x0000000103bda298 -[XMPPStreamManagement updateStoredPendingOutgoingStanzas] + 60 (XMPPStreamManagement.m:1505) 9 XMPPFramework 0x0000000103bd8714 -[XMPPStreamManagement processSentElement:] + 444 (XMPPStreamManagement.m:883) 10 XMPPFramework 0x0000000103bda664 -[XMPPStreamManagement xmppStream:didSendIQ:] + 616036 (XMPPStreamManagement.m:1621) 11 CoreFoundation 0x0000000180ece3a4 invoking + 148 12 CoreFoundation 0x0000000180eebb74 -[NSInvocation invoke] + 468 (NSForwarding.m:3378) 13 CoreFoundation 0x0000000180f229d4 -[NSInvocation invokeWithTarget:] + 80 (NSForwarding.m:3475) 14 XMPPFramework 0x0000000103b4ce28 __42-[GCDMulticastDelegate forwardInvocation:]_block_invoke + 40 (GCDMulticastDelegate.m:281) 15 libdispatch.dylib 0x0000000180bb5924 _dispatch_call_block_and_release + 32 (init.c:1517) 16 libdispatch.dylib 0x0000000180bb7670 _dispatch_client_callout + 20 (object.m:560) 17 libdispatch.dylib 0x0000000180bc5b70 _dispatch_main_queue_callback_4CF + 944 (inline_internal.h:2601) 18 CoreFoundation 0x0000000180efdd84 CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE + 16 (CFRunLoop.c:1795) 19 CoreFoundation 0x0000000180eb7f5c __CFRunLoopRun + 2540 (CFRunLoop.c:3144) 20 CoreFoundation 0x0000000180ecb468 CFRunLoopRunSpecific + 600 (CFRunLoop.c:3268) 21 GraphicsServices 0x000000019ca6f38c GSEventRunModal + 164 (GSEvent.c:2200) 22 UIKitCore 0x000000018386e5d0 -[UIApplication _run] + 1100 (UIApplication.m:3493) 23 UIKitCore 0x00000001835ecf74 UIApplicationMain + 364 (UIApplication.m:5047) 24 WAAFI 0x00000001007b3970 main + 3193200 (main.m:14) 25 dyld 0x0000000102c5daa4 start + 520 (dyldMain.cpp:879)

    Crash # 2 Exception Type: EXC_CRASH (SIGKILL) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Reason: FRONTBOARD 2343432205 <RBSTerminateContext| domain:10 code:0x8BADF00D explanation:[application<com.banksalaam.waafi>:65018] failed to terminate gracefully after 5.0s ProcessVisibility: Background ProcessState: Running WatchdogEvent: process-exit WatchdogVisibility: Background WatchdogCPUStatistics: ( "Elapsed total CPU time (seconds): 8.110 (user 6.660, system 1.450), 27% CPU", "Elapsed application CPU time (seconds): 5.168, 17% CPU" ) reportType:CrashLog maxTerminationResistance:Interactive>

    Triggered by Thread: 0

    Thread 0 name: Thread 0 Crashed: 0 libobjc.A.dylib 0x0000000199781540 objc_msgSend + 32 1 CoreFoundation 0x0000000180ef5eb8 -[__NSArrayI_Transfer dealloc] + 84 (NSCollectionAux.h:70) 2 XMPPFramework 0x0000000104388714 -[XMPPStreamManagement processSentElement:] + 608020 (XMPPStreamManagement.m:887) 3 XMPPFramework 0x000000010438a664 -[XMPPStreamManagement xmppStream:didSendIQ:] + 616036 (XMPPStreamManagement.m:1621) 4 CoreFoundation 0x0000000180ece3a4 invoking_ + 148 5 CoreFoundation 0x0000000180eebb74 -[NSInvocation invoke] + 468 (NSForwarding.m:3378) 6 CoreFoundation 0x0000000180f229d4 -[NSInvocation invokeWithTarget:] + 80 (NSForwarding.m:3475) 7 XMPPFramework 0x00000001042fce28 __42-[GCDMulticastDelegate forwardInvocation:]_block_invoke + 40 (GCDMulticastDelegate.m:281) 8 libdispatch.dylib 0x0000000180bb5924 _dispatch_call_block_and_release + 32 (init.c:1517) 9 libdispatch.dylib 0x0000000180bb7670 _dispatch_client_callout + 20 (object.m:560) 10 libdispatch.dylib 0x0000000180bc5b70 _dispatch_main_queue_callback_4CF + 944 (inline_internal.h:2601) 11 CoreFoundation 0x0000000180efdd84 CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE + 16 (CFRunLoop.c:1795) 12 CoreFoundation 0x0000000180eb7f5c __CFRunLoopRun + 2540 (CFRunLoop.c:3144) 13 CoreFoundation 0x0000000180ecb468 CFRunLoopRunSpecific + 600 (CFRunLoop.c:3268) 14 GraphicsServices 0x000000019ca6f38c GSEventRunModal + 164 (GSEvent.c:2200) 15 UIKitCore 0x000000018386e5d0 -[UIApplication _run] + 1100 (UIApplication.m:3493) 16 UIKitCore 0x00000001835ecf74 UIApplicationMain + 364 (UIApplication.m:5047) 17 WAAFI 0x0000000100f57970 main + 3193200 (main.m:14) 18 dyld 0x0000000103575aa4 start + 520 (dyldMain.cpp:879)

    opened by AmarSF 0
  • Document is empty

    Document is empty

    In my Swift app i'm trying to connect with my server but in xmppStreamDidStartNegotiation i receive this error: "Document is empty". I think it's a connection problem but with this error description i can't suppose what is wrong.

    Can you help me and give me any clue?

    opened by enigmadevs 0
  • is this possible to create one group and add members without members consent in swift

    is this possible to create one group and add members without members consent in swift

    if i create one group and add members using inviteUser and add editPrivileges as a Member.

    My question is I create one group and add members without member consent? @vitalyster

    opened by arunpandiyanp 7
Releases(4.1.0)
  • 4.1.0(Dec 31, 2020)

    New Features:

    • Add Swift Package Manager support #1177

    Bug Fixes:

    • Correct nullability for lastDisconnect #1076
    • Fixes "Block implicity retains 'self'" warnings #1078
    • Fixing the iPhone sample code for Xcode 10 #1096
    • Added publish options for device and boundle nodes #1117
    • Fix crashes in XMPPvCardTempEmail and XMPPvCardTempTel initialize #1162
    Source code(tar.gz)
    Source code(zip)
  • 4.0.0(Jun 4, 2018)

    What's New

    • XEP-0048: Bookmarks
    • XEP-0359: Stanza Ids
    • Improved Swift Support
    • Optional Swift-only features
    • Carthage support
    • Bug fixes
    • Full changelog: https://github.com/robbiehanson/XMPPFramework/compare/3.7.0...4.0.0

    To use the new Swift-only features, use the XMPPFramework/Swift podspec, or if using Carthage include XMPPFrameworkSwift.framework.

    Migration from 3.7 to 4.0

    There have been a number of changes to the public API of XMPPFramework in an attempt to improve the ergnomics and safety when used with Swift. Most Objective-C projects should require no changes, with a few minor exceptions. Many (simple) changes will be required for pure Swift projects, mostly due to the new nullability annotations. The process is still not complete so please submit issues and help if possible to minimize future breaking changes.

    XMPPFramework is now accepting contributions written in Swift, with some limitations. Swift code must be isolated in the Swift/ folder, and none of the existing or future Obj-C code may depend upon it. All public APIs written in Swift should be Obj-C compatible and marked with @objc.

    • Swift Support in XMPPFrameworkSwift.framework and XMPPFramework/Swift subspec

    • Modern Objective-C Syntax: Nullability annotations and generics.

    • Most of Core, Authentication, Categories, and Utilities have been audited. Additional help is needed for Extensions.

    • XMPPJID bareJID is now imported into Swift as bareJID instead of bare to prevent conflict with bare String. Also applies to domainJID.

    • XMPPPresence intShow has been renamed showValue and is now an XMPPPresenceShow enum instead of int. This will be a warning in 4.0 but will be removed in 4.1.

    • The XMPPMessage chatState string value is now imported into Swift as a native Swift String enum when using the Swift extensions. A new chatStateValue property is provided for accessing the raw String value in both Swift and Obj-C.

    • Readonly properties are used instead of getter methods where applicable. Getter naming overrides for properties have been removed to reflect Apple's approach.

    • The following modules still need an audit. If you use these modules please help out and contribute some time to audit them and submit a pull request, otherwise their API may contain breaking changes in future releases.

      • XEP-0191 Blocking
      • XEP-0199 Ping
      • XEP-0202 Time
      • XEP-0136 Archiving
      • XEP-0115 Capabilities (CoreDataStorage unaudited)
      • XEP-0045 MUC (Storage unaudited)
      • XEP-0054 vCardTemp (CoreDataStorage unaudited)
      • XEP-0016 Privacy
      • XEP-0012 Last Activity
      • XEP-0009 RPC
      • Roster (Storage unaudited)
      • XMPPGoogleSharedStatus
      • FileTransfer
      • CoreDataStorage
      • BandwidthMonitor
    Source code(tar.gz)
    Source code(zip)
  • 3.7.0(Feb 22, 2017)

    • XEP-0384: OMEMO Encryption (crypto libraries not included)
    • XEP-0313: Message Archive Management
    • XEP-0363: HTTP Upload
    • XEP-0357: Push
    • XEP-0334: Message Processing Hints
    • XEP-0352: Client State Indication
    • XEP-xxxx: Multi-User Chat Light (MongooseIM)
    • Improved notation of nullability and generics (help would be appreciated to audit the entire codebase!)
    • Prefer IPv6 over IPv4
    • Requires KissXML 5.2.0 and CocoaAsyncSocket 7.6.0, or higher.
    • Does not pin CocoaLumberjack version in podspec to ease 2->3 transition
    • Improved testing setup, new mock interface XMPPMockStream
    • Many other bug fixes and small changes

    Full changelog: https://github.com/robbiehanson/XMPPFramework/compare/3.6.5...3.7.0

    Source code(tar.gz)
    Source code(zip)
  • 3.6.5(Aug 17, 2015)

Owner
Robbie Hanson
Robbie Hanson
A lightweight framework to build chat applications, made in Swift

Chatto Chatto is a Swift lightweight framework to build chat applications. It's been designed to be extensible and performant. Along with Chatto there

Badoo Tech 4.4k Dec 19, 2022
MQTT for iOS and macOS written with Swift

CocoaMQTT MQTT v3.1.1 client library for iOS/macOS/tvOS written with Swift 5 Build Build with Xcode 11.1 / Swift 5.1 Installation CocoaPods Install us

EMQ X MQTT Broker 1.4k Dec 29, 2022
A smooth, responsive and flexible messages UI library for iOS.

AsyncMessagesViewController A smooth, responsive and flexible messages UI library for iOS apps. Built on top of the awesome Texture (formerly AsyncDis

Huy Nguyen 300 Oct 10, 2022
Swift toolkit for passing messages between iOS apps and extensions.

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

Abdullah Selek 58 Nov 3, 2022
Scholarly Article Search, Discussion Forum and Discussion Board

DiscussIt An app to throughly explore vast database of scholarly article, choosing one to experiment with, discuss with your friends An Open Source Ap

Ethan 6 Jun 27, 2022
A very flexible message bar for iOS written in Swift.

A very flexible message bar for iOS written in Swift.

SwiftKick Mobile 6.7k Jan 5, 2023
Open source, native iOS Messenger, with realtime chat conversations (full offline support).

OVERVIEW This is a native iOS Messenger app, with realtime chat conversations (full offline support). NEW FEATURES Passcode support GraphQL server sup

Related Code 4.5k Jan 9, 2023
Chat SDK iOS - Open Source Mobile Messenger

Chat SDK Open Source Messaging framework for iOS Chat SDK is a fully featured open source instant messaging framework for iOS. Chat SDK is fully featu

Chat SDK 879 Jan 6, 2023
Messenger Clone - Real-time iOS Chat with Firebase Firestore written in Swift

Real time Swift iOS Chat with Firebase - Messenger Clone This is an extremely simple chat app source code of an iOS Swift Chat app. It leverages Messa

Instamobile 621 Jan 6, 2023
Phantom Anonymous Messenger for iOS

?? Phantom for iOS This repository contains the complete source code of Phantom for iOS. Table of Contens ?? Report Bugs/Feature Requests/Security Iss

null 2 Mar 14, 2022
ChatSecure is a free and open source encrypted chat client for iOS that supports OTR and OMEMO encryption over XMPP.

ChatSecure ChatSecure is a free and open source XMPP messaging client for iOS that integrates OTR and OMEMO encrypted messaging support, and has optio

ChatSecure 3.1k Dec 31, 2022
Free Jabber/XMPP client for iOS and macOS

Monal A cross platform, modern XMPP client for iOS and MacOS This is the Monal XMPP client as found in the app store. If you want to use the latest st

Monal 400 Jan 5, 2023
Secret Messenger - a free and open source Jabber (XMPP) messaging client for Apple

Secret Messenger is a free and open source Jabber (XMPP) messaging client for Apple and Android devices focused on Privacy and Security with full OMEMO encrypted messaging support.

Secret Messenger 4 May 2, 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
Will Powell 1.2k Dec 29, 2022
Simple Objective-C wrapper for the keychain that works on Mac and iOS

SAMKeychain SAMKeychain is a simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system Keyc

Sam Soffes 5.4k Dec 29, 2022
Simple Objective-C wrapper for the keychain that works on Mac and iOS

SAMKeychain SAMKeychain is a simple wrapper for accessing accounts, getting passwords, setting passwords, and deleting passwords using the system Keyc

Sam Soffes 5.4k Jan 8, 2023
Easy to use CFNetwork wrapper for HTTP requests, Objective-C, Mac OS X and iPhone

ASIHTTPRequest is an easy to use wrapper around the CFNetwork API that makes some of the more tedious aspects of communicating with web servers easier

Ben Copsey 5.8k Dec 14, 2022
XIV-on-Mac - Wine Wrapper, Setup tool and launcher for FFXIV on mac

XIV on Mac Wine Wrapper, Setup tool and alternative launcher for FFXIV on MacOS.

null 210 Dec 26, 2022
Mac-asksec - Test Mac Permissions from the Terminal

asksec A simple CLI to test permissions from any macOS terminal app. Building ru

Christian Zangl 1 Jan 18, 2022