Today's lesson in not using Apple's private methods: somewhere between old/886f95f00431 and #9620 Apple changed their document icon setup process. Use the new methods and fix #9620.
(transplanted from 5cf365ce9352d25978ffd6073d3bc07573aba518)
/*
* Adium is the legal property of its developers, whose names are listed in the copyright file included
* with this source distribution.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the GNU
* General Public License as published by the Free Software Foundation; either version 2 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program; if not,
* write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/*errSecItemNotFound: no entry in the keychain. a harmless error.
*we don't ignore it if we're trying to set the password, though (because that would be strange).
*we don't get here at all for noErr (error will be nil).
*/
if(inPassword||(err!=errSecItemNotFound)){
NSDictionary*userInfo=[erroruserInfo];
NSLog(@"could not %@ password for account %@: %@ returned %ld (%@)",inPassword?@"set":@"remove",[self_accountNameForAccount:inAccount],[userInfoobjectForKey:AIKEYCHAIN_ERROR_USERINFO_SECURITYFUNCTIONNAME],(long)err,[userInfoobjectForKey:AIKEYCHAIN_ERROR_USERINFO_ERRORDESCRIPTION]);
}
}
}
/*!
* @brief Forget the password of an account
*
* @param inAccount account whose password should be forgotten
/*errSecItemNotFound: no entry in the keychain. a harmless error.
*we don't get here at all for noErr (error will be nil).
*/
if(err!=errSecItemNotFound){
NSDictionary*userInfo=[erroruserInfo];
NSLog(@"could not delete password for account %@: %@ returned %ld (%@)",[self_accountNameForAccount:inAccount],[userInfoobjectForKey:AIKEYCHAIN_ERROR_USERINFO_SECURITYFUNCTIONNAME],(long)err,[userInfoobjectForKey:AIKEYCHAIN_ERROR_USERINFO_ERRORDESCRIPTION]);
}
}
}
/*!
* @brief Retrieve the password of an account
*
* @param inAccount account whose password is desired
* @return account password, or nil if the password is not available
/*errSecItemNotFound: no entry in the keychain. a harmless error.
*we don't get here at all for noErr (error will be nil).
*/
if(err!=errSecItemNotFound){
NSDictionary*userInfo=[erroruserInfo];
NSLog(@"could not retrieve password for account %@: %@ returned %ld (%@)",[self_accountNameForAccount:inAccount],[userInfoobjectForKey:AIKEYCHAIN_ERROR_USERINFO_SECURITYFUNCTIONNAME],(long)err,[userInfoobjectForKey:AIKEYCHAIN_ERROR_USERINFO_ERRORDESCRIPTION]);
* @brief Retrieve the password of an account, prompting the user if necessary
*
* @param inAccount account whose password is desired
* @param promptOption An AIPromptOption determining whether and how a prompt for the password should be displayed if it is needed. This allows forcing or suppressing of the prompt dialogue.
* @param inTarget target to notify when password is available
* @param inSelector selector to notify when password is available
* @brief Changes the naming of the Keychain password entries from AdIM://Adium.{Service ID}.{Account internalObjectID} to AdIM://{Service ID}.{Account UID}.
NSLog(@"could not retrieve password for account %@: %@ returned %ld (%@)",[self_oldStyleAccountNameForAccount:account],[userInfoobjectForKey:AIKEYCHAIN_ERROR_USERINFO_SECURITYFUNCTIONNAME],(long)err,[userInfoobjectForKey:AIKEYCHAIN_ERROR_USERINFO_ERRORDESCRIPTION]);
/*errSecItemNotFound: no entry in the keychain. a harmless error.
*we don't get here at all for noErr (error will be nil).
*/
if(err!=errSecItemNotFound){
NSDictionary*userInfo=[erroruserInfo];
NSLog(@"could not delete password for account %@: %@ returned %ld (%@)",[self_oldStyleAccountNameForAccount:account],[userInfoobjectForKey:AIKEYCHAIN_ERROR_USERINFO_SECURITYFUNCTIONNAME],(long)err,[userInfoobjectForKey:AIKEYCHAIN_ERROR_USERINFO_ERRORDESCRIPTION]);