SSStoryStatus is a versatile and intuitive SwiftUI library designed to effortlessly display user lists and seamlessly showcase their captivating stories. This library empowers developers to effortless integration of user listings with story viewing functionality. This library provides complete control over view components for UI customization.
Profile Listing | Story View | Message & Reaction |
---|---|---|
- Image & Video stories
- Customizable component with styles
- Built-in caching support
- Callback on story seen
- Reaction emojis and message
- Story caption support
- iOS 17+
- XCode 15+
- Swift 5.9+
You can install SSStoryStaus
using Swift Package Manager by:
- Go to
Xcode
->File
->Add Package Dependencies...
- Add package URL https://github.com/SimformSolutionsPvtLtd/SSStoryStatus
CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:
$ gem install cocoapods
Navigate to project root folder to integrate pod.
$ pod init
It will generate Podfile
for your project. To integrate SSStoryStatus into your project specify it in your Podfile
:
platform :ios, '17.0'
use_frameworks!
target '<Your Target Name>' do
pod 'SSStoryStatus'
end
Then, run the following command:
$ pod install
It will generate <Project>.xcworkspace
file. From now on you should open the project using this file.
If you face build error Command PhaseScriptExecution failed with a nonzero exit code
then follow this steps:
Go to project Build Settings
-. Search for User Script Sandboxing
-> Set to No
.
Refrence - User Script Sandboxing
First import required package:
import SSStoryStatus
SSStoryStatus
accepts list of Users as UserModel
.
let users: [UserModel] = [
UserModel(
id: UUID().uuidString, // Unique identifier for user (optional, uses UUID by default)
name: "Krunal", // Name of user
image: "", // URL of profile image
stories: stories, // List of story for this user
)
]
UserModel
accepts stories for each user as list of StoryModel
.
let stories: [StoryModel] = [
StoryModel(
id: UUID().uuidString, // Unique identifier for story (optional, uses UUID by default)
mediaURL: "", // Media url of image or video
date: .now, // Story creation date
caption: "", // Caption for the story (optional)
mediaType: .image, // Media type: image or video
storyState: .seen // Story is seen or unseen
)
]
Now, you can pass this list of user to SSStoryStatus
.
SSStoryStatus(
users: users, // List of users
sorted: true, // Whether the users should be sorted based on their seen status (default is false)
cacheExpire: expireDate // Date indicating cache expiration time (default is 24 hours)
)
You can listen to callback when user see any story:
SSStoryStatus(users: users)
.onStorySeen { user, storyIndex in
print("Seen - ", user.stories[storyIndex].mediaURL) // You can retrieve story instance using user and storyIndex
}
When user press any emoji or reply to story you can observe it:
SSStoryStatus(users: users)
.emoji { emoji, user, storyIndex in
print("Selected \(emoji) for story \(user.stories[storyIndex].id)") // Emoji pressed by user
}
.messageField { message, user, storyIndex in
print("Sent \(message) to \(user.name)") // Message sent
}
For customizing SSStoryStatus please refer Customization Guide.
Documentation - Find the full API reference for more detailed documentation.
Support it by joining stargazers ⭐ for this repository.
Whether you're helping us fix bugs, improve the docs, or a feature request, we'd love to have you! 💪
Check out our Contributing Guide for ideas on contributing.
For bugs, feature feature requests, and discussion use GitHub Issues.
Check out our other libraries Awesome-Mobile-Libraries.
Distributed under the MIT license. See LICENSE for details.