Skip to content

Commit 3032bd6

Browse files
committed
init
0 parents  commit 3032bd6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+4438
-0
lines changed

.gitignore

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Xcode
2+
#
3+
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4+
5+
## Build generated
6+
build/
7+
DerivedData/
8+
Pods/
9+
10+
11+
## Various settings
12+
*.pbxuser
13+
!default.pbxuser
14+
*.mode1v3
15+
!default.mode1v3
16+
*.mode2v3
17+
!default.mode2v3
18+
*.perspectivev3
19+
!default.perspectivev3
20+
xcuserdata/
21+
22+
## Other
23+
*.moved-aside
24+
*.xccheckout
25+
*.xcscmblueprint
26+
rswift.log
27+
IDEWorkspaceChecks.plist
28+
29+
# SPM
30+
/Packages
31+
.swiftpm/config/registries.json
32+
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
33+
.netrc
34+
35+
### IntelliJ IDEA ###
36+
.idea
37+
*.iws
38+
*.iml
39+
*.ipr

.gitlab-ci.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
stages:
2+
- verify
3+
- deploy
4+
5+
include:
6+
- project: 'acquiring/devops/pipelines'
7+
ref: master
8+
file: '.checkmarx-java.yml'
9+
10+
variables:
11+
APP_NAME: payform-sdk-ios
12+
VERSION: 1.0.$CI_PIPELINE_IID
13+
14+
checkmarx:
15+
rules:
16+
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
17+
18+
push:
19+
stage: deploy
20+
script:
21+
- git config --global user.email $OPEN_SOURCE_GITHUB_EMAIL
22+
- git config --global user.name $OPEN_SOURCE_GITHUB_LOGIN
23+
- git tag $VERSION
24+
- git push https://$OPEN_SOURCE_GITHUB_LOGIN:[email protected]/Raiffeisen-DGTL/$APP_NAME.git HEAD:main --force
25+
- git push origin $VERSION
26+
only:
27+
- main

Package.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// swift-tools-version: 5.6
2+
// The swift-tools-version declares the minimum version of Swift required to build this package.
3+
4+
import PackageDescription
5+
6+
let package = Package(
7+
name: "Raiffeisen SBP SDK",
8+
defaultLocalization: "ru",
9+
platforms: [
10+
.iOS(.v13),
11+
],
12+
products: [
13+
// Products define the executables and libraries a package produces, and make them visible to other packages.
14+
.library(
15+
name: "Raiffeisen SBP SDK",
16+
targets: ["sbp_framework"]),
17+
],
18+
dependencies: [
19+
// Dependencies declare other packages that this package depends on.
20+
// .package(url: /* package url */, from: "1.0.0"),
21+
],
22+
targets: [
23+
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
24+
// Targets can depend on other targets in this package, and on products in packages this package depends on.
25+
.target(
26+
name: "sbp_framework",
27+
dependencies: [],
28+
resources: [
29+
.process("supported_files"),
30+
.process("Resources")]),
31+
]
32+
)

README.md

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# Raiffeisen SBP SDK
2+
3+
СДК предоставляет функционал для перенаправления пользователя для оплаты по СБП.
4+
5+
### Установка
6+
7+
1. Добавьте фреймворк в проект
8+
9+
Для подключения данного фреймворка в проект используется Swift Package Manager.
10+
11+
- В меню Xcode выбираем File -> Add Packages...
12+
- Далее в открывшемся окне в поле поиска копируем ссылку на данный репозиторий (ссылка должна заканчиваться на .git)
13+
- Устанавливаем Dependency Rule, например branch: main (в этом случае всегда будет подтягиваться состояние с ветки main)
14+
- Устанавливаем Add to project. В этом поле нужно указать к какому проекту должен быть подключен фреймворк.
15+
- Нажимаем кнопку Add Package.
16+
17+
После этого фреймворк можно использовать.
18+
19+
2. Настройте конфигурацию info.plist:
20+
21+
Вам необходимо добавить ключи LSApplicationQueriesSchemes в ваш info.plist.
22+
23+
Это необходимо для того, чтобы метод UIApplication.shared.canOpenURL работал корректно.
24+
25+
Для того чтобы эти ключи подгружались во время сборки добавьте Run Script в таргете вашего проекта во вкладке Build Phases и пропишите следующий код:
26+
27+
```bash
28+
plutil -remove LSApplicationQueriesSchemes @INFO_PLIST_FILE
29+
30+
plutil -insert LSApplicationQueriesSchemes -xml '<array/>' @INFO_PLIST_FILE
31+
32+
list=$(curl -s 'https://qr.nspk.ru/proxyapp/c2bmembers.json' | jq -r '.dictionary[].schema')
33+
34+
index=0
35+
36+
for value in $list;
37+
do
38+
plutil -insert LSApplicationQueriesSchemes.$index -string $value @INFO_PLIST_FILE
39+
index=$((index+1))
40+
done
41+
```
42+
43+
Так же необходимо установить библиотеку jq для парсинга json в bash.
44+
45+
```bash
46+
brew install jq
47+
```
48+
49+
*Начиная с iOS 15, существует ограничение максимум на 50 ключей приложений в списке, поэтому будут учитываться только первый 50 ключей. Подробности смотрите [здесь](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl#discussion).*
50+
51+
52+
53+
### Использование:
54+
55+
1. Добавьте импорт фреймворка
56+
57+
2. Проинициализируйте класс SBPRedirectView(), передав ссылку на оплату в формате: `https://qr.nspk.ru/AD100004BAL7227F9BNP6KNE007J9B3K?type=02&bank=100000000007&sum=1&cur=RUB&crc=AB75`
58+
и обработав результат.
59+
60+
3. Вызовите метод show(), передав в параметрах UIViewController.
61+
62+
4. В комплишне вызовите метод dismiss() в случаях, когда виджет нужно скрыть.
63+
64+
```swift
65+
import UIKit
66+
import sbp_framework
67+
68+
class ViewController: UIViewController {
69+
70+
private var sbpModule: SBPRedirectModule?
71+
72+
override func viewDidLoad() {
73+
super.viewDidLoad()
74+
// Do any additional setup after loading the view.
75+
}
76+
77+
@IBAction func showSBPPopup(_ sender: Any) {
78+
79+
sbpModule = SBPRedirectModule(link: link) { [weak self] result in
80+
switch result {
81+
case let .redirectToBank(scheme):
82+
print("redirected to bank: \(scheme)")
83+
self?.sbpModule?.dismiss()
84+
case let .redirectToDownloadBank(scheme):
85+
print("redirected to App Store to download bank: \(scheme)")
86+
case let .redirectToBankFailed(error):
87+
print(error)
88+
case .redirectToDefaultBank:
89+
print("redirect to default bank")
90+
case .dialogDismissed:
91+
print("dialog dissmissed")
92+
}
93+
}
94+
95+
sbpModule?.show(on: self)
96+
}
97+
}
98+
```
99+
100+
### Сборка семпл проекта
101+
Выполните команду pod install, находясь в директории example.
102+
103+
Откройте example/example.workspace и нажмите "Run".
104+
105+
Так же в корне проекта есть уже собраный файл sbp-sdk-ios-build.ipa.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
3+
<device id="retina6_1" orientation="portrait" appearance="light"/>
4+
<dependencies>
5+
<deployment identifier="iOS"/>
6+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
7+
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
8+
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
9+
</dependencies>
10+
<objects>
11+
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
12+
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
13+
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="BankCell" id="gTV-IL-0wX" customClass="SBPCollectionViewCell" customModule="sbp_framework">
14+
<rect key="frame" x="0.0" y="0.0" width="108" height="93"/>
15+
<autoresizingMask key="autoresizingMask"/>
16+
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
17+
<rect key="frame" x="0.0" y="0.0" width="108" height="93"/>
18+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
19+
<subviews>
20+
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="pFG-8a-4fa">
21+
<rect key="frame" x="22" y="0.0" width="64" height="64"/>
22+
<constraints>
23+
<constraint firstAttribute="width" constant="64" id="4yN-Uv-qz8"/>
24+
<constraint firstAttribute="height" constant="64" id="ziL-8P-Dfk"/>
25+
</constraints>
26+
</imageView>
27+
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Сбербанк Банк" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DEx-KF-bwg">
28+
<rect key="frame" x="21" y="68" width="66" height="17"/>
29+
<fontDescription key="fontDescription" type="system" pointSize="14"/>
30+
<nil key="textColor"/>
31+
<nil key="highlightedColor"/>
32+
</label>
33+
</subviews>
34+
</view>
35+
<viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
36+
<constraints>
37+
<constraint firstItem="pFG-8a-4fa" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="9jH-aT-k6J"/>
38+
<constraint firstItem="pFG-8a-4fa" firstAttribute="centerX" secondItem="gTV-IL-0wX" secondAttribute="centerX" id="QTG-Ga-uBU"/>
39+
<constraint firstItem="DEx-KF-bwg" firstAttribute="centerX" secondItem="gTV-IL-0wX" secondAttribute="centerX" id="a4F-US-d2g"/>
40+
<constraint firstItem="DEx-KF-bwg" firstAttribute="top" secondItem="pFG-8a-4fa" secondAttribute="bottom" constant="4" id="cax-PU-2Z1"/>
41+
<constraint firstItem="DEx-KF-bwg" firstAttribute="leading" secondItem="pFG-8a-4fa" secondAttribute="leading" constant="-1" id="iK8-zh-7z6"/>
42+
<constraint firstItem="DEx-KF-bwg" firstAttribute="trailing" secondItem="pFG-8a-4fa" secondAttribute="trailing" constant="1" id="ode-FQ-7zL"/>
43+
</constraints>
44+
<size key="customSize" width="108" height="93"/>
45+
<connections>
46+
<outlet property="imageView" destination="pFG-8a-4fa" id="aZP-jP-2jb"/>
47+
<outlet property="textLabel" destination="DEx-KF-bwg" id="J8v-qv-Pbb"/>
48+
</connections>
49+
<point key="canvasLocation" x="173.91304347826087" y="142.96875"/>
50+
</collectionViewCell>
51+
</objects>
52+
</document>

0 commit comments

Comments
 (0)