diff --git a/hrp/pkg/uixt/android_device.go b/hrp/pkg/uixt/android_device.go index deb30179..29080689 100644 --- a/hrp/pkg/uixt/android_device.go +++ b/hrp/pkg/uixt/android_device.go @@ -453,6 +453,7 @@ func (dev *AndroidDevice) GetPackageInfo(packageName string) (AppInfo, error) { PackageName: packageName, VersionName: matches[1], } + log.Info().Interface("appInfo", appInfo).Msg("get app info") return appInfo, nil } return appInfo, errors.New("failed to get package version") diff --git a/hrp/pkg/uixt/android_test.go b/hrp/pkg/uixt/android_test.go index 8e6f4aa2..965fc01a 100644 --- a/hrp/pkg/uixt/android_test.go +++ b/hrp/pkg/uixt/android_test.go @@ -42,6 +42,14 @@ func TestAndroidDevice_GetPackageInfo(t *testing.T) { t.Log(appInfo) } +func TestIOSDevice_GetPackageInfo(t *testing.T) { + device, err := NewIOSDevice() + checkErr(t, err) + appInfo, err := device.GetPackageInfo("com.apple.Preferences") + checkErr(t, err) + t.Log(appInfo) +} + func TestDriver_NewSession(t *testing.T) { driver, err := NewUIADriver(nil, uiaServerURL) if err != nil { diff --git a/hrp/pkg/uixt/ios_device.go b/hrp/pkg/uixt/ios_device.go index 0f9e71c5..5e144faa 100644 --- a/hrp/pkg/uixt/ios_device.go +++ b/hrp/pkg/uixt/ios_device.go @@ -13,6 +13,7 @@ import ( "strconv" "time" + "github.com/mitchellh/mapstructure" "github.com/pkg/errors" "github.com/rs/zerolog/log" @@ -734,6 +735,39 @@ func (dev *IOSDevice) RunXCTest(bundleID string) (cancel context.CancelFunc, err return cancel, nil } -func (dev *IOSDevice) GetPackageInfo(packageName string) (AppInfo, error) { - return AppInfo{}, nil +type Application struct { + CFBundleVersion string `json:"version"` + CFBundleDisplayName string `json:"name"` + CFBundleIdentifier string `json:"bundleId"` +} + +func (dev *IOSDevice) GetPackageInfo(packageName string) (AppInfo, error) { + appInfo := AppInfo{ + Name: packageName, + } + applicationType := gidevice.ApplicationTypeAny + result, err := dev.d.InstallationProxyBrowse( + gidevice.WithApplicationType(applicationType), + gidevice.WithReturnAttributes("CFBundleVersion", "CFBundleDisplayName", "CFBundleIdentifier")) + if err != nil { + return appInfo, errors.Wrap(code.DeviceShellExecError, + fmt.Sprintf("get app list failed %v", err)) + } + + for _, app := range result { + a := Application{} + mapstructure.Decode(app, &a) + + if a.CFBundleIdentifier != packageName { + continue + } + appInfo.AppBaseInfo = AppBaseInfo{ + BundleId: a.CFBundleIdentifier, + VersionName: a.CFBundleVersion, + AppName: a.CFBundleDisplayName, + } + log.Info().Interface("appInfo", appInfo).Msg("get app info") + return appInfo, nil + } + return appInfo, errors.New("failed to get package version") }