Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#

## Unreleased
* Add iOS Swift Package Manager support while retaining CocoaPods compatibility.

## 1.3.9
* FIX BUG

Expand Down
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@
| Android | YES |
| Ios | YES |

## iOS 依赖管理

iOS 同时支持 CocoaPods 和 Swift Package Manager(SPM)。使用支持 SPM 的 Flutter 版本时,可通过以下命令启用:

```shell
flutter config --enable-swift-package-manager
```

插件已在 SPM 清单中包含阿里云 XCFramework、MJExtension、SDWebImage、资源文件及 `-ObjC` 链接配置,无需在 Xcode 中重复添加这些依赖。已有 Flutter 工程的迁移方式请参考 [Flutter 官方 SPM 文档](https://docs.flutter.dev/packages-and-plugins/swift-package-manager/for-app-developers)。


## 授权⻚点击事件响应码

Expand Down
11 changes: 10 additions & 1 deletion README_en.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,16 @@ However, when using or referring to the ideas or related contents of this plug-i
| Android | YES |
| Ios | YES |

## iOS dependency management

iOS supports both CocoaPods and Swift Package Manager (SPM). With an SPM-compatible Flutter version, enable it with:

```shell
flutter config --enable-swift-package-manager
```

The Swift package already includes the Alibaba Cloud XCFrameworks, MJExtension, SDWebImage, resources, and the `-ObjC` linker setting. Do not add those dependencies to Xcode again. For migrating an existing Flutter app, see the [official Flutter SPM guide](https://docs.flutter.dev/packages-and-plugins/swift-package-manager/for-app-developers).

## code click response

| 响应码 | 响应码描述 |
Expand Down Expand Up @@ -100,4 +110,3 @@ dependencies:
## Stargazers over time

[![Stargazers over time](https://starchart.cc/CodeGather/flutter_ali_auth.svg)](https://starchart.cc/CodeGather/flutter_ali_auth)

9 changes: 4 additions & 5 deletions ios/ali_auth.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ Pod::Spec.new do |s|
s.license = { :file => '../LICENSE' }
s.author = { 'Your Company' => 'raohong07@163.com' }
s.source = { :path => '.' }
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
s.source_files = 'ali_auth/Sources/ali_auth/*.{h,m}', 'ali_auth/Sources/ali_auth/{Base,Privacy,Utils,view}/**/*.{h,m}'
s.public_header_files = 'ali_auth/Sources/ali_auth/*.h', 'ali_auth/Sources/ali_auth/{Base,Privacy,Utils,view}/**/*.h'

s.dependency 'Flutter'
s.dependency 'SDWebImage'
Expand All @@ -22,7 +22,7 @@ Pod::Spec.new do |s|

s.frameworks = 'Network'

s.vendored_frameworks = 'libs/ATAuthSDK.xcframework', 'libs/YTXMonitor.xcframework', 'libs/YTXOperators.xcframework'
s.vendored_frameworks = 'ali_auth/libs/ATAuthSDK.xcframework', 'ali_auth/libs/YTXMonitor.xcframework', 'ali_auth/libs/YTXOperators.xcframework'
s.static_framework = false

# 解决移动crash
Expand All @@ -32,11 +32,10 @@ Pod::Spec.new do |s|
}

# 加载静态资源
s.resources = ['Assets/*']
s.resources = ['ali_auth/Sources/ali_auth/Resources/*']

s.ios.deployment_target = '11.0'
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
# s.pod_target_xcconfig = {'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
# s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
end

66 changes: 66 additions & 0 deletions ios/ali_auth/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// swift-tools-version: 5.9

import PackageDescription

let package = Package(
name: "ali_auth",
platforms: [
.iOS("11.0"),
],
products: [
.library(name: "ali-auth", targets: ["ali_auth"]),
],
dependencies: [
.package(name: "FlutterFramework", path: "../FlutterFramework"),
.package(
url: "https://github.com/CoderMJLee/MJExtension.git",
from: "3.4.2"
),
.package(
url: "https://github.com/SDWebImage/SDWebImage.git",
from: "5.21.3"
),
],
targets: [
.target(
name: "ali_auth",
dependencies: [
.product(name: "FlutterFramework", package: "FlutterFramework"),
.product(name: "MJExtension", package: "MJExtension"),
.product(name: "SDWebImage", package: "SDWebImage"),
"ATAuthSDK",
"YTXMonitor",
"YTXOperators",
],
path: "Sources/ali_auth",
resources: [
.process("Resources"),
],
publicHeadersPath: "include",
cSettings: [
.headerSearchPath("."),
.headerSearchPath("Base"),
.headerSearchPath("Privacy"),
.headerSearchPath("Utils"),
.headerSearchPath("view"),
.headerSearchPath("include/ali_auth"),
],
linkerSettings: [
.linkedFramework("Network"),
.unsafeFlags(["-ObjC"]),
]
),
.binaryTarget(
name: "ATAuthSDK",
path: "libs/ATAuthSDK.xcframework"
),
.binaryTarget(
name: "YTXMonitor",
path: "libs/YTXMonitor.xcframework"
),
.binaryTarget(
name: "YTXOperators",
path: "libs/YTXOperators.xcframework"
),
]
)
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,20 @@
#import "PNSBackgroundView.h"
#import "AliAuthPlugin.h"
#import <ATAuthSDK/ATAuthSDK.h>
#if SWIFT_PACKAGE
#import "resource_bundle_accessor.h"
#endif

static UIImage *AliAuthImageNamed(NSString *name) {
#if SWIFT_PACKAGE
UIImage *image = [UIImage imageNamed:name
inBundle:SWIFTPM_MODULE_BUNDLE
compatibleWithTraitCollection:nil];
return image ?: [UIImage imageNamed:name];
#else
return [UIImage imageNamed:name];
#endif
}

#define TX_SCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height
#define TX_SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width
Expand Down Expand Up @@ -74,7 +88,7 @@ + (TXCustomModel *)buildFullScreenPortraitModel:(NSDictionary *)viewConfig
model.hideNavBackItem = isHiddenNavBack;
/// 动态读取assets文件夹下的资源
UIImage * navBackImage = [self changeUriPathToImage: [viewConfig stringValueForKey: @"navReturnImgPath" defaultValue: nil]];
model.navBackImage = navBackImage?:[UIImage imageNamed:@"icon_close_light"];
model.navBackImage = navBackImage?:AliAuthImageNamed(@"icon_close_light");

if (!isHiddenNavBack) {
/// 自定义返回按钮
Expand Down Expand Up @@ -179,8 +193,8 @@ + (TXCustomModel *)buildFullScreenPortraitModel:(NSDictionary *)viewConfig
UIImage* login_btn_unable = [self changeUriPathToImage: logBtnCustomBackgroundImagePath[1]];
// login_btn_press
UIImage* login_btn_press = [self changeUriPathToImage: logBtnCustomBackgroundImagePath[2]];
UIImage *defaultClick = [UIImage imageNamed:@"button_click"];
UIImage *defaultUnClick = [UIImage imageNamed:@"button_unclick"];
UIImage *defaultClick = AliAuthImageNamed(@"button_click");
UIImage *defaultUnClick = AliAuthImageNamed(@"button_unclick");
// fix '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
if ((login_btn_normal != nil && login_btn_unable != nil && login_btn_press != nil) || (defaultClick != nil && defaultUnClick != nil)) {
// 登录按钮设置
Expand Down Expand Up @@ -424,8 +438,8 @@ + (TXCustomModel *)buildFullScreenLandscapeModel:(NSDictionary *)dict
NSFontAttributeName : [UIFont systemFontOfSize:20.0]
};
model.navTitle = [[NSAttributedString alloc] initWithString:@"一键登录" attributes:attributes];
model.navBackImage = [UIImage imageNamed:@"icon_nav_back_light"];
model.logoImage = [UIImage imageNamed:@"taobao"];
model.navBackImage = AliAuthImageNamed(@"icon_nav_back_light");
model.logoImage = AliAuthImageNamed(@"taobao");
model.sloganIsHidden = YES;
model.changeBtnIsHidden = YES;
model.privacyOne = @[@"协议1", @"https://www.taobao.com"];
Expand Down Expand Up @@ -498,7 +512,7 @@ + (TXCustomModel *)buildAlertPortraitMode:(NSDictionary *)viewConfig
model.alertCloseItemIsHidden = [viewConfig boolValueForKey: @"alertCloseItemIsHidden" defaultValue: NO];

UIImage * alertCloseImage = [self changeUriPathToImage: [viewConfig stringValueForKey: @"alertCloseImage" defaultValue: nil]];
model.alertCloseImage = alertCloseImage?:[UIImage imageNamed:@"icon_close_light"];
model.alertCloseImage = alertCloseImage?:AliAuthImageNamed(@"icon_close_light");

model.alertCloseItemFrameBlock = ^CGRect(CGSize screenSize,CGSize superViewSize,CGRect frame) {
if ([self isHorizontal:screenSize]) {
Expand Down Expand Up @@ -596,8 +610,8 @@ + (TXCustomModel *)buildAlertPortraitMode:(NSDictionary *)viewConfig
// login_btn_press
UIImage * login_btn_press = [self changeUriPathToImage: logBtnCustomBackgroundImagePath[2]];
// default
UIImage *defaultClick = [UIImage imageNamed:@"button_click"];
UIImage *defaultUnClick = [UIImage imageNamed:@"button_unclick"];
UIImage *defaultClick = AliAuthImageNamed(@"button_click");
UIImage *defaultUnClick = AliAuthImageNamed(@"button_unclick");
// fix '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
if ((login_btn_normal != nil && login_btn_unable != nil && login_btn_press != nil) || (defaultClick != nil && defaultUnClick != nil)) {
// 登录按钮设置
Expand Down Expand Up @@ -837,7 +851,7 @@ + (TXCustomModel *)buildAlertLandscapeMode:(NSDictionary *)dict
NSFontAttributeName : [UIFont systemFontOfSize:20.0]
};
model.alertTitle = [[NSAttributedString alloc] initWithString:@"一键登录" attributes:attributes];
model.alertCloseImage = [UIImage imageNamed:@"icon_close_light"];
model.alertCloseImage = AliAuthImageNamed(@"icon_close_light");
model.logoIsHidden = YES;
model.sloganIsHidden = YES;
model.changeBtnIsHidden = YES;
Expand Down Expand Up @@ -913,7 +927,7 @@ + (TXCustomModel *)buildSheetPortraitModel:(NSDictionary *)viewConfig
/// 关闭按钮
model.alertCloseItemIsHidden = [viewConfig boolValueForKey: @"alertCloseItemIsHidden" defaultValue: NO];
UIImage * alertCloseImage = [self changeUriPathToImage: [viewConfig stringValueForKey: @"alertCloseImage" defaultValue: nil]];
model.alertCloseImage = alertCloseImage?:[UIImage imageNamed:@"icon_close_light"];
model.alertCloseImage = alertCloseImage?:AliAuthImageNamed(@"icon_close_light");
model.alertCloseItemFrameBlock = ^CGRect(CGSize screenSize,CGSize superViewSize,CGRect frame) {
if ([self isHorizontal:screenSize]) {
//横屏时模拟隐藏该控件
Expand Down Expand Up @@ -997,8 +1011,8 @@ + (TXCustomModel *)buildSheetPortraitModel:(NSDictionary *)viewConfig
// login_btn_press
UIImage * login_btn_press = [self changeUriPathToImage: logBtnCustomBackgroundImagePath[2]];
// default
UIImage *defaultClick = [UIImage imageNamed:@"button_click"];
UIImage *defaultUnClick = [UIImage imageNamed:@"button_unclick"];
UIImage *defaultClick = AliAuthImageNamed(@"button_click");
UIImage *defaultUnClick = AliAuthImageNamed(@"button_unclick");
// fix '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
if ((login_btn_normal != nil && login_btn_unable != nil && login_btn_press != nil) || (defaultClick != nil && defaultUnClick != nil)) {
// 登录按钮设置
Expand Down Expand Up @@ -1272,8 +1286,8 @@ + (TXCustomModel *)buildFullScreenAutorotateModel:(NSDictionary *)dict
NSFontAttributeName : [UIFont systemFontOfSize:20.0]
};
model.navTitle = [[NSAttributedString alloc] initWithString:@"一键登录" attributes:attributes];
model.navBackImage = [UIImage imageNamed:@"icon_nav_back_light"];
model.logoImage = [UIImage imageNamed:@"taobao"];
model.navBackImage = AliAuthImageNamed(@"icon_nav_back_light");
model.logoImage = AliAuthImageNamed(@"taobao");
model.changeBtnIsHidden = YES;
model.privacyOne = @[@"协议1", @"https://www.taobao.com"];

Expand Down Expand Up @@ -1363,8 +1377,8 @@ + (TXCustomModel *)buildAlertAutorotateMode:(NSDictionary *)dict
NSFontAttributeName : [UIFont systemFontOfSize:20.0]
};
model.alertTitle = [[NSAttributedString alloc] initWithString:@"一键登录" attributes:attributes];
model.alertCloseImage = [UIImage imageNamed:@"icon_close_light"];
model.logoImage = [UIImage imageNamed:@"taobao"];
model.alertCloseImage = AliAuthImageNamed(@"icon_close_light");
model.logoImage = AliAuthImageNamed(@"taobao");
model.sloganIsHidden = YES;
model.changeBtnIsHidden = YES;
model.privacyOne = @[@"自定义协议", @"https://www.taobao.com"];
Expand Down Expand Up @@ -1737,7 +1751,7 @@ + (TXCustomModel *)buildModelOption:(NSDictionary *)dict
};
} else {
/// 动态读取assets文件夹下的资源
UIImage * navBackImage = model.navBackImage?:[UIImage imageNamed:@"icon_close_light"];
UIImage * navBackImage = model.navBackImage?:AliAuthImageNamed(@"icon_close_light");
model.navBackImage = navBackImage;
/// 自定义返回按钮
model.navBackButtonFrameBlock = ^CGRect(CGSize screenSize, CGSize superViewSize, CGRect frame) {
Expand Down Expand Up @@ -1817,8 +1831,8 @@ + (TXCustomModel *)buildModelOption:(NSDictionary *)dict
UIImage* login_btn_unable = [self changeUriPathToImage: logBtnCustomBackgroundImagePath[1]];
// login_btn_press
UIImage* login_btn_press = [self changeUriPathToImage: logBtnCustomBackgroundImagePath[2]];
UIImage *defaultClick = [UIImage imageNamed:@"button_click"];
UIImage *defaultUnClick = [UIImage imageNamed:@"button_unclick"];
UIImage *defaultClick = AliAuthImageNamed(@"button_click");
UIImage *defaultUnClick = AliAuthImageNamed(@"button_unclick");
// fix '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
if ((login_btn_normal != nil && login_btn_unable != nil && login_btn_press != nil) || (defaultClick != nil && defaultUnClick != nil)) {
// 登录按钮设置
Expand Down Expand Up @@ -1966,7 +1980,7 @@ + (TXCustomModel *)buildModelOption:(NSDictionary *)dict
};
#pragma mark 10、弹窗样式
if (PNSBuildModelStyleAlertPortrait == style || PNSBuildModelStyleAlertLandscape == style || PNSBuildModelStyleSheetPortrait == style) {
model.alertCloseImage = model.alertCloseImage?:[UIImage imageNamed:@"icon_close_light"];
model.alertCloseImage = model.alertCloseImage?:AliAuthImageNamed(@"icon_close_light");
model.alertCloseItemFrameBlock = ^CGRect(CGSize screenSize,CGSize superViewSize,CGRect frame) {
if ([self isHorizontal:screenSize]) {
//横屏时模拟隐藏该控件
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#import <Flutter/Flutter.h>

@interface AliAuthPlugin : NSObject <FlutterPlugin>
@end