func parseIPA(path string) (plinfo *plistBundle, err error) { plistre := regexp.MustCompile(`^Payload/[^/]*/Info\.plist$`) r, err := zip.OpenReader(path) if err != nil { return } defer r.Close() var plfile *zip.File for _, file := range r.File { if plistre.MatchString(file.Name) { plfile = file break } } if plfile == nil { err = errors.New("Info.plist file not found") return } plreader, err := plfile.Open() if err != nil { return } defer plreader.Close() buf := make([]byte, plfile.FileInfo().Size()) _, err = io.ReadFull(plreader, buf) if err != nil { return } dec := goplist.NewDecoder(bytes.NewReader(buf)) plinfo = new(plistBundle) err = dec.Decode(plinfo) return }
// CreateProvisioningProfileModelFromFile ... func CreateProvisioningProfileModelFromFile(filePth string) (ProvisioningProfileModel, error) { profileContent, err := cmdex.NewCommand("security", "cms", "-D", "-i", filePth).RunAndReturnTrimmedCombinedOutput() if err != nil { return ProvisioningProfileModel{}, fmt.Errorf("Failed to retrieve information about Provisioning Profile, error: %s", err) } log.Debugln("profileContent: ", profileContent) var provProfileData ProvisioningProfileModel if err := plist.NewDecoder(strings.NewReader(profileContent)).Decode(&provProfileData); err != nil { return provProfileData, fmt.Errorf("Failed to parse Provisioning Profile content, error: %s", err) } if provProfileData.UUID == "" { return provProfileData, fmt.Errorf("No UUID found in the Provisioning Profile (%#v)", provProfileData) } return provProfileData, nil }
func DecodeInput(r io.ReadSeeker) (*Table, error) { d := plist.NewDecoder(r) var data Table return &data, d.Decode(&data) }