An XMPP Framework in Objective-C for the Mac and iOS development community.
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)
The minimum deployment target is iOS 8.0 / macOS 10.9 / tvOS 9.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.
-
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 asbareJID
instead ofbare
to prevent conflict withbare
String. Also applies todomainJID
. -
XMPPPresence
intShow
has been renamedshowValue
and is now anXMPPPresenceShow
enum instead ofint
. This will be a warning in 4.0 but will be removed in 4.1. -
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
The easiest way to install XMPPFramework is using CocoaPods. Remember to add to the top of your Podfile
the use_frameworks!
line (even if you are not using swift):
This will install the whole framework with all the available extensions:
use_frameworks!
# 3.7 Stable Release
pod 'XMPPFramework', '~> 3.7.0'
# 4.0 Preview / Master Branch
pod 'XMPPFramework', :git => 'https://github.com/robbiehanson/XMPPFramework.git', :branch => 'master'
After pod install
open the .xcworkspace
and import:
import XMPPFramework // swift
@import XMPPFramework; //objective-c
To integrate XMPPFramework into your Xcode project using Carthage, specify it in your Cartfile
:
# ⚠️ Carthage support is currently experimental ⚠️
# For now, use the master branch until a Carthage-compatible
# tagged release is available.
github "robbiehanson/XMPPFramework" "master"
Run carthage
to build the framework and drag the built XMPPFramework.framework
into your Xcode project.
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
inXMPPFramework.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 inTesting-Shared
for inspiration. - You will need both CocoaPods and Carthage to work on tests. Run
carthage checkout
in the root of the repository, andbundle install && bundle exec pod install
in theTesting-iOS
andTesting-macOS
folders. - Create your test files to the
Testing-Shared
folder, and then add them to the iOS, macOS, and tvOS targets inTesting-Carthage/XMPPFrameworkTests.xcodeproj
,Testing-macOS/XMPPFrameworkTests.xcworkspace
andTesting-iOS/XMPPFrameworkTests.xcworkspace
.
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
If you find a security problem, please do not open a public issue on GitHub. Instead, email one of the maintainers directly:
For more info please take a look at the wiki.
- Overview of the XMPP Framework
- Getting started using XMPPFramework on Mac OS X
- Getting started using XMPPFramework on iOS
- XEPs supported by the XMPPFramework
- Learn more about XMPPFramework
Can't find the answer to your question in any of the wiki articles? Try the mailing list.
Love the project? Wanna buy me a ☕️? (or a 🍺 😀):